12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- from django.http import Http404
- from django.shortcuts import render
- from django.urls import reverse
- from django.views import View
- from ...core.shortcuts import get_int_or_404
- from ..viewmodels import (
- ForumThreads,
- PrivateThreads,
- PrivateThreadsCategory,
- ThreadsCategory,
- ThreadsRootCategory,
- )
- class ThreadsList(View):
- category = None
- threads = None
- template_name = None
- def get(self, request, list_type=None, **kwargs):
- start = get_int_or_404(request.GET.get("start", 0))
- category = self.get_category(request, **kwargs)
- threads = self.get_threads(request, category, list_type, start)
- frontend_context = self.get_frontend_context(request, category, threads)
- request.frontend_context.update(frontend_context)
- template_context = self.get_template_context(request, category, threads)
- return render(request, self.template_name, template_context)
- def get_category(self, request, **kwargs):
- return self.category(request, **kwargs) # pylint: disable=not-callable
- def get_threads(self, request, category, list_type, start):
- return self.threads( # pylint: disable=not-callable
- request, category, list_type, start
- )
- def get_frontend_context(self, request, category, threads):
- context = self.get_default_frontend_context()
- context.update(category.get_frontend_context())
- context.update(threads.get_frontend_context())
- return context
- def get_default_frontend_context(self):
- return {}
- def get_template_context(self, request, category, threads):
- context = self.get_default_template_context()
- context.update(category.get_template_context())
- context.update(threads.get_template_context())
- return context
- def get_default_template_context(self):
- return {}
- class ForumThreadsList(ThreadsList):
- category = ThreadsRootCategory
- threads = ForumThreads
- template_name = "misago/threadslist/threads.html"
- def get_default_frontend_context(self):
- return {"MERGE_THREADS_API": reverse("misago:api:thread-merge")}
- class CategoryThreadsList(ForumThreadsList):
- category = ThreadsCategory
- template_name = "misago/threadslist/category.html"
- def get_category(self, request, **kwargs):
- category = super().get_category(request, **kwargs)
- if not category.level:
- raise Http404() # disallow root category access
- return category
- class PrivateThreadsList(ThreadsList):
- category = PrivateThreadsCategory
- threads = PrivateThreads
- template_name = "misago/threadslist/private_threads.html"
|