list.py 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. from django.conf import settings
  2. from django.core.urlresolvers import reverse
  3. from django.http import Http404
  4. from django.shortcuts import render
  5. from django.views.generic import View
  6. from ..viewmodels import (
  7. PrivateThreadsCategory, ThreadsCategory, ThreadsRootCategory,
  8. ForumThreads, PrivateThreads)
  9. class ListBase(View):
  10. category = None
  11. threads = None
  12. template_name = None
  13. def get(self, request, list_type=None, **kwargs):
  14. try:
  15. page = int(request.GET.get('page', 0))
  16. except (ValueError, TypeError):
  17. raise Http404()
  18. category = self.get_category(request, **kwargs)
  19. threads = self.get_threads(request, category, list_type, page)
  20. frontend_context = self.get_frontend_context(request, category, threads)
  21. request.frontend_context.update(frontend_context)
  22. template_context = self.get_template_context(request, category, threads)
  23. return render(request, self.template_name, template_context)
  24. def get_category(self, request, **kwargs):
  25. return self.category(request, **kwargs)
  26. def get_threads(self, request, category, list_type, page):
  27. return self.threads(request, category, list_type, page)
  28. def get_frontend_context(self, request, category, threads):
  29. context = self.get_default_frontend_context()
  30. context.update(category.get_frontend_context())
  31. context.update(threads.get_frontend_context())
  32. return context
  33. def get_default_frontend_context(self):
  34. return {}
  35. def get_template_context(self, request, category, threads):
  36. context = self.get_default_template_context()
  37. context.update(category.get_template_context())
  38. context.update(threads.get_template_context())
  39. return context
  40. def get_default_template_context(self):
  41. return {}
  42. class ForumThreads(ListBase):
  43. category = ThreadsRootCategory
  44. threads = ForumThreads
  45. template_name = 'misago/threadslist/threads.html'
  46. def get_default_frontend_context(self):
  47. return {
  48. 'MERGE_THREADS_API': reverse('misago:api:thread-merge'),
  49. }
  50. class CategoryThreads(ForumThreads):
  51. category = ThreadsCategory
  52. template_name = 'misago/threadslist/category.html'
  53. def get_category(self, request, **kwargs):
  54. category = super(CategoryThreads, self).get_category(request, **kwargs)
  55. if not category.level:
  56. raise Http404() # disallow root category access
  57. return category
  58. class PrivateThreads(ListBase):
  59. category = PrivateThreadsCategory
  60. threads = PrivateThreads
  61. template_name = 'misago/threadslist/private_threads.html'