thread.py 1.9 KB

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