thread.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from django.shortcuts import render
  2. from django.urls import reverse
  3. from django.views import View
  4. from ..viewmodels import ForumThread, PrivateThread, ThreadPosts
  5. class ThreadBase(View):
  6. thread = None
  7. posts = ThreadPosts
  8. template_name = None
  9. def get(self, request, pk, slug, page=0):
  10. thread = self.get_thread(request, pk, slug)
  11. posts = self.get_posts(request, thread, page)
  12. frontend_context = self.get_frontend_context(request, thread, posts)
  13. request.frontend_context.update(frontend_context)
  14. template_context = self.get_template_context(request, thread, posts)
  15. return render(request, self.template_name, template_context)
  16. def get_thread(self, request, pk, slug):
  17. return self.thread( # pylint: disable=not-callable
  18. request,
  19. pk,
  20. slug,
  21. path_aware=True,
  22. read_aware=True,
  23. subscription_aware=True,
  24. poll_votes_aware=True,
  25. )
  26. def get_posts(self, request, thread, page):
  27. return self.posts(request, thread, page)
  28. def get_default_frontend_context(self):
  29. return {}
  30. def get_frontend_context(self, request, thread, posts):
  31. context = self.get_default_frontend_context()
  32. context.update(
  33. {
  34. "THREAD": thread.get_frontend_context(),
  35. "POSTS": posts.get_frontend_context(),
  36. }
  37. )
  38. return context
  39. def get_template_context(self, request, thread, posts):
  40. context = {
  41. "url_name": ":".join(
  42. request.resolver_match.namespaces + [request.resolver_match.url_name]
  43. )
  44. }
  45. context.update(thread.get_template_context())
  46. context.update(posts.get_template_context())
  47. return context
  48. class ThreadView(ThreadBase):
  49. thread = ForumThread
  50. template_name = "misago/thread/thread.html"
  51. def get_default_frontend_context(self):
  52. return {"THREADS_API": reverse("misago:api:thread-list")}
  53. class PrivateThreadView(ThreadBase):
  54. thread = PrivateThread
  55. template_name = "misago/thread/private_thread.html"