summaryrefslogtreecommitdiff
path: root/app/utils/views.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/utils/views.py')
-rw-r--r--app/utils/views.py102
1 files changed, 102 insertions, 0 deletions
diff --git a/app/utils/views.py b/app/utils/views.py
new file mode 100644
index 0000000..7a0c67d
--- /dev/null
+++ b/app/utils/views.py
@@ -0,0 +1,102 @@
+from itertools import chain
+import json
+from django.http import Http404, HttpResponse, JsonResponse
+from django.apps import apps
+from django.views.generic import ListView
+from django.views.generic.base import View, RedirectView
+from django.views.generic.edit import FormView, ModelFormMixin
+from django.utils.decorators import method_decorator
+from django.contrib.auth.decorators import login_required
+from django.shortcuts import render_to_response
+from django.shortcuts import render
+from django.template import RequestContext
+from taggit.models import Tag
+#from dal import autocomplete
+
+
+class PaginatedListView(ListView):
+ """
+ handles my own pagination system
+ """
+ context_object_name = 'object_list'
+
+ def dispatch(self, request, *args, **kwargs):
+ path = request.path.split('/')[1:-1]
+ if path[-1] == self.kwargs['page']:
+ path = "/".join(t for t in path[:-1])
+ request.page_url = "/" + path + '/%d/'
+ else:
+ request.page_url = request.path + '%d/'
+ print(request.page_url)
+ request.page = int(self.kwargs['page'])
+ request.base_path = path
+ return super(PaginatedListView, self).dispatch(request, *args, **kwargs)
+
+
+@method_decorator(login_required, name='dispatch')
+class LoggedInViewWithUser(View):
+
+ def get_form_kwargs(self, **kwargs):
+ kwargs = super().get_form_kwargs(**kwargs)
+ kwargs.update({'user': self.request.user})
+ return kwargs
+
+
+@method_decorator(login_required, name='dispatch')
+class LoggedInViewWithUser(FormView):
+
+ def get_form_kwargs(self, **kwargs):
+ kwargs = super().get_form_kwargs(**kwargs)
+ kwargs.update({'user': self.request.user})
+ return kwargs
+
+
+class AjaxableResponseMixin:
+ """
+ Mixin to add AJAX support to a form.
+ Must be used with an object-based FormView (e.g. CreateView)
+ """
+ def form_invalid(self, form):
+ response = super().form_invalid(form)
+ if self.request.is_ajax():
+ return JsonResponse(form.errors, status=400)
+ else:
+ return response
+
+ def form_valid(self, form):
+ # We make sure to call the parent's form_valid() method because
+ # it might do some processing (in the case of CreateView, it will
+ # call form.save() for example).
+ print(self.request.META)
+ print('x request header', self.request.META['HTTP_X_REQUESTED_WITH'])
+ response = super().form_valid(form)
+ if self.request.is_ajax():
+ data = {
+ 'pk': self.object.pk,
+ }
+ return JsonResponse(data)
+ else:
+ return response
+'''
+class TagAutocomplete(autocomplete.Select2QuerySetView):
+ def get_queryset(self):
+ # Don't forget to filter out results depending on the visitor !
+ if not self.request.user.is_authenticated:
+ return Tag.objects.none()
+
+ qs = Tag.objects.all()
+
+ if self.q:
+ qs = qs.filter(name__istartswith=self.q)
+
+ return qs
+'''
+
+def nav_json(request, app, model, pk):
+ model = apps.get_model(app_label=app, model_name=model)
+ p = model.objects.get(pk=pk)
+ data = {}
+ data['prev'] = p.get_previous_admin_url
+ data['next'] = p.get_next_admin_url
+ data = json.dumps(data)
+ return HttpResponse(data)