thread.py 1.9 KB

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