generic.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. from django.contrib import messages
  2. from django.shortcuts import redirect
  3. from django.views.generic import View
  4. from misago.admin import site
  5. from misago.admin.views import render
  6. class AdminBaseMixin(object):
  7. """
  8. Admin mixin abstraciton used for configuring admin CRUD views.
  9. Takes following attributes:
  10. Model = Model instance
  11. message_404 = string used in "requested item not found" messages
  12. root_link = name of link leading to root action (eg. list of all items
  13. template_dir = directory with templates
  14. """
  15. Model = None
  16. message_404 = None
  17. root_link = None
  18. template_dir = None
  19. def get_model(self):
  20. return self.Model
  21. class AdminView(View):
  22. def final_template(self):
  23. return '%s/%s' % (self.template_dir, self.template)
  24. def get_target(self, target):
  25. Model = self.get_model()
  26. return Model.objects.get(id=target)
  27. def _get_target(self, request, kwargs):
  28. """
  29. get_target is called by view to fetch item from DB
  30. """
  31. Model = self.get_model()
  32. try:
  33. return self.get_target(target)
  34. except Model.DoesNotExist:
  35. messages.error(request, self.message_404)
  36. return redirect(self.root_link)
  37. def render(self, request, context=None):
  38. context = context or {}
  39. return render(request, self.final_template(), context)
  40. class ItemsList(AdminView):
  41. template = 'list.html'
  42. items_per_page = 0
  43. def dispatch(self, request, *args, **kwargs):
  44. context = {}
  45. context['items'] = self.get_model().objects.all()
  46. return self.render(request, context)
  47. class FormView(AdminView):
  48. template = 'form.html'
  49. def dispatch(self, request, *args, **kwargs):
  50. pass
  51. class ButtonView(AdminView):
  52. def get(self, request, *args, **kwargs):
  53. pass
  54. def post(self, request, *args, **kwargs):
  55. pass