thread.py 2.0 KB

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