thread.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import render
  3. from django.views.generic import View
  4. from misago.threads.viewmodels.thread import ForumThread
  5. from misago.threads.viewmodels.posts import ThreadPosts
  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, slug, pk)
  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)
  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(thread.get_frontend_context())
  26. context.update(posts.get_frontend_context())
  27. return context
  28. def get_template_context(self, request, thread, posts):
  29. context = {
  30. 'url_name': ':'.join(request.resolver_match.namespaces + [request.resolver_match.url_name])
  31. }
  32. context.update(thread.get_template_context())
  33. context.update(posts.get_template_context())
  34. return context
  35. class Thread(ThreadBase):
  36. thread = ForumThread
  37. template_name = 'misago/thread/thread.html'
  38. def get_default_frontend_context(self):
  39. return {
  40. 'THREADS_API': reverse('misago:api:thread-list'),
  41. #'POSTS_API': reverse('misago:api:posts-list'),
  42. }
  43. class PrivateThread(ThreadBase):
  44. template_name = 'misago/thread/private_thread.html'