1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from django.conf import settings
- from django.shortcuts import render
- from django.views.generic import View
- from misago.acl import add_acl
- from misago.core.shortcuts import paginate, pagination_dict, validate_slug
- from misago.threads.mixins.threadview import ThreadViewMixin
- from misago.threads.mixins.typemixins import ThreadMixin, PrivateThreadMixin
- from misago.threads.permissions.threads import exclude_invisible_posts
- class BaseThread(View, ThreadViewMixin):
- def get(self, request, slug, pk, page=0, **kwargs):
- thread = self.get_thread(request, pk)
- validate_slug(thread, slug)
- base_posts_queryset = thread.post_set.select_related('poster').order_by('id')
- posts_queryset = exclude_invisible_posts(request.user, thread.category, base_posts_queryset)
- list_page = paginate(posts_queryset, page, settings.MISAGO_POSTS_PER_PAGE, settings.MISAGO_POSTS_TAIL)
- paginator = pagination_dict(list_page, include_page_range=False)
- posts = list(list_page.object_list)
- request.frontend_context.update(self.get_frontend_context(request, thread, posts, paginator))
- return render(request, self.template_name, self.get_context_data(request, thread, posts, paginator))
- def get_frontend_context(self, request, thread, posts, paginator):
- return {}
- def get_context_data(self, request, thread=None, posts=None, category=None, paginator=None):
- return {
- 'category': thread.category,
- 'thread': thread,
- 'posts': posts,
- 'count': paginator['count'],
- 'paginator': paginator,
- 'url_name': ':'.join(request.resolver_match.namespaces + [request.resolver_match.url_name])
- }
- class Thread(BaseThread, ThreadMixin):
- template_name = 'misago/thread/thread.html'
- class PrivateThread(BaseThread, PrivateThreadMixin):
- template_name = 'misago/thread/private_thread.html'
|