list.py 2.6 KB

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