Class based ajax views for django
<p>The code defines several Django views that handle AJAX requests for different actions in a web application. The views are designed to respond with JSON containing HTML content that can …
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | from django.http import JsonResponse
from django import template
from django.template.loader import render_to_string
from django.template.loader import TemplateDoesNotExist
class AjaxListView:
def get(self, request, *args, **kwargs):
ajax_list_partial = self.ajax_list_partial
self.object_list = super().get_queryset()
context = super().get_context_data(**kwargs)
if not ajax_list_partial:
raise TemplateDoesNotExist("No ajax__list_partial provided {}".format(self))
if request.is_ajax():
html_form = render_to_string(self.ajax_list_partial, context, request)
return JsonResponse({'html_form': html_form})
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['object_list'] = super().get_queryset()
return context
class AjaxCreateView:
def get(self, request, *args, **kwargs):
self.object = None
ajax_create_partial = self.ajax_create_partial
ajax_list_partial = self.ajax_list_partial
context = super().get_context_data(**kwargs)
if not ajax_create_partial or not ajax_list_partial:
raise TemplateDoesNotExist("No ajax_create_partial or ajax_list_partial provided {}".format(self))
if request.is_ajax():
html_form = render_to_string(self.ajax_create_partial, context, request)
return JsonResponse({'html_form': html_form})
return super().get(request, *args, **kwargs)
def form_valid(self, form):
data = dict()
context = self.get_context_data()
if form.is_valid():
form.save()
data['form_is_valid'] = True
data['list'] = render_to_string(
self.ajax_list_partial, context, self.request)
if self.request.is_ajax():
return JsonResponse(data)
return super().form_valid(form)
def form_invalid(self, form):
data = dict()
context = self.get_context_data()
data['form_is_valid'] = False
data['html_form'] = render_to_string(
self.ajax_create_partial, context, request=self.request)
if self.request.is_ajax():
return JsonResponse(data)
return super().form_invalid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['object_list'] = super().get_queryset()
return context
class AjaxUpdateView:
def get(self, request, *args, **kwargs):
ajax_update_partial = self.ajax_update_partial
ajax_list_partial = self.ajax_list_partial
self.object = super().get_object()
context = super().get_context_data(**kwargs)
if not ajax_update_partial or not ajax_list_partial:
raise TemplateDoesNotExist("No ajax_update_partial or ajax_list_partial provided {}".format(self))
if request.is_ajax():
html_form = render_to_string(self.ajax_update_partial, context, request)
return JsonResponse({'html_form': html_form})
return super().get(request, *args, **kwargs)
def form_valid(self, form):
data = dict()
context = self.get_context_data()
if form.is_valid():
form.save()
data['form_is_valid'] = True
data['list'] = render_to_string(
self.ajax_list_partial, context, self.request)
if self.request.is_ajax():
return JsonResponse(data)
return super().form_valid(form)
def form_invalid(self, form):
data = dict()
context = super().get_context_data()
data['form_is_valid'] = False
data['html_form'] = render_to_string(
self.ajax_update_partial, context, request=self.request)
if self.request.is_ajax():
return JsonResponse(data)
return super().form_invalid(form)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['object_list'] = super().get_queryset()
return context
class AjaxDeleteView:
def get(self, request, *args, **kwargs):
self.object = self.get_object()
context = super().get_context_data(**kwargs)
ajax_delete_partial = self.ajax_delete_partial
ajax_list_partial = self.ajax_list_partial
if not ajax_delete_partial or not ajax_list_partial:
raise TemplateDoesNotExist("No ajax_delete_partial or ajax_list_partial provided {}".format(self))
if request.is_ajax():
html_form = render_to_string(
self.ajax_delete_partial, context, request)
return JsonResponse({'html_form': html_form})
return super().get(request, *args, **kwargs)
def post(self, *args, **kwargs):
ajax_delete_partial = self.ajax_delete_partial
ajax_list_partial = self.ajax_list_partial
if self.request.is_ajax():
self.object = super().get_object()
self.object.delete()
data = dict()
data['form_is_valid'] = True
context = super().get_context_data(**kwargs)
context['object_list'] = self.get_queryset()
data['list'] = render_to_string(
self.ajax_list_partial, context, self.request)
return JsonResponse(data)
return self.delete(*args, **kwargs)
|