list.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from django.core.urlresolvers import reverse
  2. from django.shortcuts import redirect
  3. from django.template import RequestContext
  4. from django.utils.translation import ugettext as _
  5. from misago.acl.utils import ACLError403, ACLError404
  6. from misago.forums.models import Forum
  7. from misago.threads.models import Thread, Post
  8. from misago.threads.views.base import BaseView
  9. from misago.views import error403, error404
  10. from misago.utils import make_pagination
  11. class ThreadsView(BaseView):
  12. def fetch_forum(self, forum):
  13. self.forum = Forum.objects.get(pk=forum, type='forum')
  14. self.request.acl.forums.allow_forum_view(self.forum)
  15. self.parents = self.forum.get_ancestors().filter(level__gt=1)
  16. def fetch_threads(self, page):
  17. self.count = Thread.objects.filter(forum=self.forum).count()
  18. self.threads = Thread.objects.filter(forum=self.forum).order_by('-weight', '-last').all()
  19. self.pagination = make_pagination(page, self.count, self.request.settings.threads_per_page)
  20. if self.request.settings.threads_per_page < self.count:
  21. self.threads = self.threads[self.pagination['start']:self.pagination['stop']]
  22. def __call__(self, request, slug=None, forum=None, page=0):
  23. self.request = request
  24. self.pagination = None
  25. self.parents = None
  26. try:
  27. self.fetch_forum(forum)
  28. self.fetch_threads(page)
  29. except Forum.DoesNotExist:
  30. return error404(self.request)
  31. except ACLError403 as e:
  32. return error403(args[0], e.message)
  33. except ACLError404 as e:
  34. return error404(args[0], e.message)
  35. return request.theme.render_to_response('threads/list.html',
  36. {
  37. 'message': request.messages.get_message('threads'),
  38. 'forum': self.forum,
  39. 'parents': self.parents,
  40. 'count': self.count,
  41. 'threads': self.threads,
  42. 'pagination': self.pagination,
  43. },
  44. context_instance=RequestContext(request));