thread.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from django.conf import settings
  2. from django.shortcuts import render
  3. from django.views.generic import View
  4. from misago.acl import add_acl
  5. from misago.core.shortcuts import paginate, pagination_dict, validate_slug
  6. from misago.threads.mixins.threadview import ThreadViewMixin
  7. from misago.threads.mixins.typemixins import ThreadMixin, PrivateThreadMixin
  8. from misago.threads.permissions.threads import exclude_invisible_posts
  9. class BaseThread(View, ThreadViewMixin):
  10. def get(self, request, slug, pk, page=0, **kwargs):
  11. thread = self.get_thread(request, pk)
  12. validate_slug(thread, slug)
  13. base_posts_queryset = thread.post_set.select_related('poster').order_by('id')
  14. posts_queryset = exclude_invisible_posts(request.user, thread.category, base_posts_queryset)
  15. list_page = paginate(posts_queryset, page, settings.MISAGO_POSTS_PER_PAGE, settings.MISAGO_POSTS_TAIL)
  16. paginator = pagination_dict(list_page, include_page_range=False)
  17. posts = list(list_page.object_list)
  18. request.frontend_context.update(self.get_frontend_context(request, thread, posts, paginator))
  19. return render(request, self.template_name, self.get_context_data(request, thread, posts, paginator))
  20. def get_frontend_context(self, request, thread, posts, paginator):
  21. return {}
  22. def get_context_data(self, request, thread=None, posts=None, category=None, paginator=None):
  23. return {
  24. 'category': thread.category,
  25. 'thread': thread,
  26. 'posts': posts,
  27. 'count': paginator['count'],
  28. 'paginator': paginator,
  29. 'url_name': ':'.join(request.resolver_match.namespaces + [request.resolver_match.url_name])
  30. }
  31. class Thread(BaseThread, ThreadMixin):
  32. template_name = 'misago/thread/thread.html'
  33. class PrivateThread(BaseThread, PrivateThreadMixin):
  34. template_name = 'misago/thread/private_thread.html'