thread.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from django.shortcuts import render
  2. from django.urls import reverse
  3. from django.views.generic import View
  4. from misago.threads.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(
  18. request, pk, slug, read_aware=True, subscription_aware=True, poll_votes_aware=True
  19. )
  20. def get_posts(self, request, thread, page):
  21. return self.posts(request, thread, page)
  22. def get_default_frontend_context(self):
  23. return {}
  24. def get_frontend_context(self, request, thread, posts):
  25. context = self.get_default_frontend_context()
  26. context.update({
  27. 'THREAD': thread.get_frontend_context(),
  28. 'POSTS': posts.get_frontend_context(),
  29. })
  30. return context
  31. def get_template_context(self, request, thread, posts):
  32. context = {
  33. 'url_name':
  34. ':'.join(request.resolver_match.namespaces + [
  35. request.resolver_match.url_name,
  36. ])
  37. }
  38. context.update(thread.get_template_context())
  39. context.update(posts.get_template_context())
  40. return context
  41. class ThreadView(ThreadBase):
  42. thread = ForumThread
  43. template_name = 'misago/thread/thread.html'
  44. def get_default_frontend_context(self):
  45. return {
  46. 'THREADS_API': reverse('misago:api:thread-list'),
  47. }
  48. class PrivateThreadView(ThreadBase):
  49. thread = PrivateThread
  50. template_name = 'misago/thread/private_thread.html'