Просмотр исходного кода

Created utility function for jump2page computations #113

Ralfp 12 лет назад
Родитель
Сommit
c39fe9c8bb
2 измененных файлов с 12 добавлено и 9 удалено
  1. 4 9
      misago/apps/threadtype/base.py
  2. 8 0
      misago/utils/pagination.py

+ 4 - 9
misago/apps/threadtype/base.py

@@ -2,7 +2,7 @@ from django.core.urlresolvers import reverse
 from django.http import Http404
 from django.http import Http404
 from django.shortcuts import redirect
 from django.shortcuts import redirect
 from misago.models import Forum, Thread, Post
 from misago.models import Forum, Thread, Post
-from misago.utils.pagination import make_pagination
+from misago.utils.pagination import page_number
 
 
 class ViewBase(object):
 class ViewBase(object):
     def __new__(cls, request, **kwargs):
     def __new__(cls, request, **kwargs):
@@ -50,14 +50,9 @@ class ViewBase(object):
 
 
     def redirect_to_post(self, post):
     def redirect_to_post(self, post):
         queryset = self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set)
         queryset = self.request.acl.threads.filter_posts(self.request, self.thread, self.thread.post_set)
-        total = queryset.count()
-        page = int(queryset.filter(id__lte=post.pk).count() / self.request.settings.posts_per_page)
-        try:
-            pagination = make_pagination(page, total, self.request.settings.posts_per_page)
-            if pagination['total'] > 1:
-                return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
-        except Http404:
-            pass
+        page = page_number(queryset.filter(id__lte=post.pk).count(), queryset.count(), self.request.settings.posts_per_page)
+        if page > 1:
+            return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug, 'page': pagination['total']}) + ('#post-%s' % post.pk))
         return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))
         return redirect(reverse(self.type_prefix, kwargs={'thread': self.thread.pk, 'slug': self.thread.slug}) + ('#post-%s' % post.pk))
 
 
     def template_vars(self, context):
     def template_vars(self, context):

+ 8 - 0
misago/utils/pagination.py

@@ -53,3 +53,11 @@ def make_pagination(page, total, per):
 
 
     # Return complete pager
     # Return complete pager
     return pagination
     return pagination
+
+
+def page_number(item, total, per):
+    page_item = int(item / per) + 1
+    pages_total = int(math.ceil(total / float(per)))
+    if page_item == pages_total and total - (total * pages_total) < int(per / 5):
+        page_item -= 1
+    return page_item