mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-14 06:11:16 +00:00
Using django paginator in group discuss
This commit is contained in:
@@ -78,7 +78,7 @@
|
||||
|
||||
{% if group_msgs %}
|
||||
<ul class="msg-list">
|
||||
{% for msg in group_msgs %}
|
||||
{% for msg in group_msgs.object_list %}
|
||||
<li class="msg w100 ovhd">
|
||||
<div class="pic fleft">
|
||||
<a href="{% url 'user_profile' msg.from_email %}">{% avatar msg.from_email 48 %}</a>
|
||||
@@ -149,29 +149,25 @@
|
||||
</ul>
|
||||
{% endif %}
|
||||
|
||||
{% if msgs_more %}
|
||||
<button id="msgs-more" class="big-more-btn">{% trans "More" %}</button>
|
||||
{% endif %}
|
||||
|
||||
{% if pages_show|length > 1 %}
|
||||
<div id="paginator"{% if msgs_more %} class="hide"{% endif %}>
|
||||
{% if current_page != 1 %}
|
||||
<a href="?page={{ prev_page }}" class="prev">{% trans "Previous" %}</a>
|
||||
{% if group_msgs.has_other_pages %}
|
||||
<div id="paginator">
|
||||
{% if group_msgs.has_previous %}
|
||||
<a href="?page={{ group_msgs.previous_page_number }}" class="prev">{% trans "Previous" %}</a>
|
||||
{% endif %}
|
||||
{% for p in pages_show %}
|
||||
{% if p == current_page %}
|
||||
<span class="cur">{{ p }}</span>
|
||||
{% else %}
|
||||
<a href="?page={{ p }}" class="pg">{{ p }}</a>
|
||||
{% endif %}
|
||||
{% for pr in group_msgs.page_range %}
|
||||
{% if pr == group_msgs.number %}
|
||||
<span class="cur">{{ pr }}</span>
|
||||
{% else %}
|
||||
<a href="?page={{ pr }}" class="pg">{{ pr }}</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if page_next %}
|
||||
<a href="?page={{ next_page }}" class="next">{% trans "Next"%}</a>
|
||||
{% if group_msgs.has_next %}
|
||||
<a href="?page={{ group_msgs.next_page_number }}" class="next">{% trans "Next"%}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if group_msgs|length > 5 %}
|
||||
{% if group_msgs.object_list|length > 5 %}
|
||||
<a href="#group-reply" id="msg-upward" class="hide">{% trans "↑Top" %}</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -180,7 +176,7 @@
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
{% if group_msgs|length > 5 %}
|
||||
{% if group_msgs.object_list|length > 5 %}
|
||||
$(window).scroll(function() {
|
||||
var up_icon = $('#msg-upward');
|
||||
var msg_panel = $('#group-reply');
|
||||
|
@@ -5,6 +5,7 @@ import stat
|
||||
import simplejson as json
|
||||
import urllib2
|
||||
from django.core.mail import send_mail
|
||||
from django.core.paginator import EmptyPage, InvalidPage
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.contrib import messages
|
||||
from django.contrib.sites.models import RequestSite
|
||||
@@ -48,6 +49,7 @@ from seahub.utils import render_error, render_permission_error, \
|
||||
validate_group_name, string2list, check_and_get_org_by_group, \
|
||||
check_and_get_org_by_repo, gen_file_get_url, get_file_type_and_ext, \
|
||||
get_file_contributors
|
||||
from seahub.utils.paginator import Paginator
|
||||
from seahub.utils.slugify import slugify
|
||||
from seahub.views import is_registered_user
|
||||
from seahub.forms import RepoCreateForm, SharedRepoCreateForm
|
||||
@@ -970,25 +972,33 @@ def group_discuss(request, group_id):
|
||||
is_staff = True if check_group_staff(group.id, request.user) else False
|
||||
|
||||
"""group messages"""
|
||||
# Show 15 group messages per page.
|
||||
paginator = Paginator(GroupMessage.objects.filter(
|
||||
group_id=group_id).order_by('-timestamp'), 15)
|
||||
|
||||
# Make sure page request is an int. If not, deliver first page.
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
page = int(request.GET.get('page', '1'))
|
||||
except ValueError:
|
||||
current_page = 1
|
||||
per_page = 15
|
||||
page = 1
|
||||
|
||||
group_msgs = GroupMessage.objects.filter(
|
||||
group_id=group_id).order_by(
|
||||
'-timestamp')[per_page*(current_page-1) : per_page*current_page]
|
||||
# If page request (9999) is out of range, deliver last page of results.
|
||||
try:
|
||||
group_msgs = paginator.page(page)
|
||||
except (EmptyPage, InvalidPage):
|
||||
group_msgs = paginator.page(paginator.num_pages)
|
||||
|
||||
group_msgs = list(group_msgs) # Force evaluate queryset to fix some database error for mysql
|
||||
group_msgs.page_range = paginator.get_page_range(group_msgs.number)
|
||||
|
||||
attachments = MessageAttachment.objects.filter(group_message__in=group_msgs)
|
||||
# Force evaluate queryset to fix some database error for mysql.
|
||||
group_msgs.object_list = list(group_msgs.object_list)
|
||||
|
||||
msg_replies = MessageReply.objects.filter(reply_to__in=group_msgs)
|
||||
attachments = MessageAttachment.objects.filter(group_message__in=group_msgs.object_list)
|
||||
|
||||
msg_replies = MessageReply.objects.filter(reply_to__in=group_msgs.object_list)
|
||||
reply_to_list = [ r.reply_to_id for r in msg_replies ]
|
||||
|
||||
for msg in group_msgs:
|
||||
for msg in group_msgs.object_list:
|
||||
msg.reply_cnt = reply_to_list.count(msg.id)
|
||||
msg.replies = []
|
||||
for r in msg_replies:
|
||||
@@ -1015,25 +1025,6 @@ def group_discuss(request, group_id):
|
||||
att.name = os.path.basename(path)
|
||||
msg.attachment = att
|
||||
|
||||
msg_total_num = GroupMessage.objects.filter(group_id=group_id).count()
|
||||
total_page = msg_total_num/per_page
|
||||
if msg_total_num % per_page > 0:
|
||||
total_page += 1
|
||||
|
||||
page_next = True if current_page < total_page else False
|
||||
|
||||
# get page numbers shown in the web page
|
||||
first_page = 1
|
||||
if total_page <= 10:
|
||||
last_page = total_page
|
||||
else:
|
||||
if current_page < 6:
|
||||
last_page = 10
|
||||
else:
|
||||
first_page = current_page - 5
|
||||
last_page = current_page + 4 if current_page + 4 < total_page else total_page
|
||||
pages_show = range(first_page, last_page + 1)
|
||||
|
||||
return render_to_response("group/group_discuss.html", {
|
||||
"members": members,
|
||||
"group_id": group_id,
|
||||
@@ -1041,11 +1032,6 @@ def group_discuss(request, group_id):
|
||||
"is_staff": is_staff,
|
||||
"group_msgs": group_msgs,
|
||||
"form": form,
|
||||
'current_page': current_page,
|
||||
'prev_page': current_page-1,
|
||||
'next_page': current_page+1,
|
||||
'page_next': page_next,
|
||||
'pages_show': pages_show,
|
||||
'group_members_default_display': GROUP_MEMBERS_DEFAULT_DISPLAY,
|
||||
}, context_instance=RequestContext(request));
|
||||
|
||||
|
18
utils/paginator.py
Normal file
18
utils/paginator.py
Normal file
@@ -0,0 +1,18 @@
|
||||
from django.core.paginator import Paginator as DefaultPaginator
|
||||
|
||||
class Paginator(DefaultPaginator):
|
||||
def get_page_range(self, current_page=1):
|
||||
"""
|
||||
Returns custom range of pages.
|
||||
"""
|
||||
first_page = 1
|
||||
total_page = self.num_pages
|
||||
if total_page <= 10:
|
||||
last_page = total_page
|
||||
else:
|
||||
if current_page < 6:
|
||||
last_page = 10
|
||||
else:
|
||||
first_page = current_page - 5
|
||||
last_page = current_page + 4 if current_page + 4 < total_page else total_page
|
||||
return range(first_page, last_page + 1)
|
Reference in New Issue
Block a user