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

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.shortcuts import redirect
 from misago.models import Forum, Thread, Post
-from misago.utils.pagination import make_pagination
+from misago.utils.pagination import page_number
 
 class ViewBase(object):
     def __new__(cls, request, **kwargs):
@@ -50,14 +50,9 @@ class ViewBase(object):
 
     def redirect_to_post(self, post):
         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))
 
     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 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