Browse Source

Base threads list view

Rafał Pitoń 10 years ago
parent
commit
deff6376d0
1 changed files with 34 additions and 10 deletions
  1. 34 10
      misago/threads/views/generic.py

+ 34 - 10
misago/threads/views/generic.py

@@ -95,13 +95,8 @@ class ViewBase(ForumMixin, ThreadMixin, PostMixin, View):
         return render(request, template, context)
 
 
-class ForumView(ViewBase):
-    """
-    Basic view for threads lists
-    """
-    template = 'list.html'
-
-    def get_threads(self, request, forum, kwargs):
+class ThreadsView(ViewBase):
+    def get_threads(self, request, kwargs):
         queryset = self.get_threads_queryset(request, forum)
 
         threads_qs = queryset.filter(weight__lt=ANNOUNCEMENT)
@@ -120,10 +115,10 @@ class ForumView(ViewBase):
 
         return page, threads
 
-    def get_threads_queryset(self, request, forum):
+    def get_threads_queryset(self, request):
         return forum.thread_set.all().order_by('-last_post_on')
 
-    def add_threads_reads(self, request, forum, threads):
+    def add_threads_reads(self, request, threads):
         for thread in threads:
             thread.is_new = False
 
@@ -131,12 +126,41 @@ class ForumView(ViewBase):
         for thread in threads:
             thread.is_new = random.choice((True, False))
 
+
+class ForumView(ThreadsView):
+    """
+    Basic view for threads lists
+    """
+    template = 'list.html'
+
+    def get_threads(self, request, forum, kwargs):
+        queryset = self.get_threads_queryset(request, forum)
+
+        threads_qs = queryset.filter(weight__lt=ANNOUNCEMENT)
+        threads_qs = threads_qs.order_by('-weight', '-last_post_on')
+
+        page = paginate(threads_qs, kwargs.get('page', 0), 30, 10)
+        threads = []
+
+        for announcement in queryset.filter(weight=ANNOUNCEMENT):
+            threads.append(announcement)
+        for thread in page.object_list:
+            threads.append(thread)
+
+        for thread in threads:
+            thread.forum = forum
+
+        return page, threads
+
+    def get_threads_queryset(self, request, forum):
+        return forum.thread_set.all().order_by('-last_post_on')
+
     def dispatch(self, request, *args, **kwargs):
         forum = self.get_forum(request, **kwargs)
         forum.subforums = get_forums_list(request.user, forum)
 
         page, threads = self.get_threads(request, forum, kwargs)
-        self.add_threads_reads(request, forum, threads)
+        self.add_threads_reads(request, threads)
 
         return self.render(request, {
             'forum': forum,