mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-14 14:21:23 +00:00
Using django paginator in group discuss
This commit is contained in:
@@ -78,7 +78,7 @@
|
|||||||
|
|
||||||
{% if group_msgs %}
|
{% if group_msgs %}
|
||||||
<ul class="msg-list">
|
<ul class="msg-list">
|
||||||
{% for msg in group_msgs %}
|
{% for msg in group_msgs.object_list %}
|
||||||
<li class="msg w100 ovhd">
|
<li class="msg w100 ovhd">
|
||||||
<div class="pic fleft">
|
<div class="pic fleft">
|
||||||
<a href="{% url 'user_profile' msg.from_email %}">{% avatar msg.from_email 48 %}</a>
|
<a href="{% url 'user_profile' msg.from_email %}">{% avatar msg.from_email 48 %}</a>
|
||||||
@@ -149,29 +149,25 @@
|
|||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if msgs_more %}
|
{% if group_msgs.has_other_pages %}
|
||||||
<button id="msgs-more" class="big-more-btn">{% trans "More" %}</button>
|
<div id="paginator">
|
||||||
|
{% if group_msgs.has_previous %}
|
||||||
|
<a href="?page={{ group_msgs.previous_page_number }}" class="prev">{% trans "Previous" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% for pr in group_msgs.page_range %}
|
||||||
{% if pages_show|length > 1 %}
|
{% if pr == group_msgs.number %}
|
||||||
<div id="paginator"{% if msgs_more %} class="hide"{% endif %}>
|
<span class="cur">{{ pr }}</span>
|
||||||
{% if current_page != 1 %}
|
|
||||||
<a href="?page={{ prev_page }}" class="prev">{% trans "Previous" %}</a>
|
|
||||||
{% endif %}
|
|
||||||
{% for p in pages_show %}
|
|
||||||
{% if p == current_page %}
|
|
||||||
<span class="cur">{{ p }}</span>
|
|
||||||
{% else %}
|
{% else %}
|
||||||
<a href="?page={{ p }}" class="pg">{{ p }}</a>
|
<a href="?page={{ pr }}" class="pg">{{ pr }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if page_next %}
|
{% if group_msgs.has_next %}
|
||||||
<a href="?page={{ next_page }}" class="next">{% trans "Next"%}</a>
|
<a href="?page={{ group_msgs.next_page_number }}" class="next">{% trans "Next"%}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% 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>
|
<a href="#group-reply" id="msg-upward" class="hide">{% trans "↑Top" %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -180,7 +176,7 @@
|
|||||||
|
|
||||||
{% block extra_script %}
|
{% block extra_script %}
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
{% if group_msgs|length > 5 %}
|
{% if group_msgs.object_list|length > 5 %}
|
||||||
$(window).scroll(function() {
|
$(window).scroll(function() {
|
||||||
var up_icon = $('#msg-upward');
|
var up_icon = $('#msg-upward');
|
||||||
var msg_panel = $('#group-reply');
|
var msg_panel = $('#group-reply');
|
||||||
|
@@ -5,6 +5,7 @@ import stat
|
|||||||
import simplejson as json
|
import simplejson as json
|
||||||
import urllib2
|
import urllib2
|
||||||
from django.core.mail import send_mail
|
from django.core.mail import send_mail
|
||||||
|
from django.core.paginator import EmptyPage, InvalidPage
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.sites.models import RequestSite
|
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, \
|
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, \
|
check_and_get_org_by_repo, gen_file_get_url, get_file_type_and_ext, \
|
||||||
get_file_contributors
|
get_file_contributors
|
||||||
|
from seahub.utils.paginator import Paginator
|
||||||
from seahub.utils.slugify import slugify
|
from seahub.utils.slugify import slugify
|
||||||
from seahub.views import is_registered_user
|
from seahub.views import is_registered_user
|
||||||
from seahub.forms import RepoCreateForm, SharedRepoCreateForm
|
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
|
is_staff = True if check_group_staff(group.id, request.user) else False
|
||||||
|
|
||||||
"""group messages"""
|
"""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.
|
# Make sure page request is an int. If not, deliver first page.
|
||||||
try:
|
try:
|
||||||
current_page = int(request.GET.get('page', '1'))
|
page = int(request.GET.get('page', '1'))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
current_page = 1
|
page = 1
|
||||||
per_page = 15
|
|
||||||
|
|
||||||
group_msgs = GroupMessage.objects.filter(
|
# If page request (9999) is out of range, deliver last page of results.
|
||||||
group_id=group_id).order_by(
|
try:
|
||||||
'-timestamp')[per_page*(current_page-1) : per_page*current_page]
|
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 ]
|
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.reply_cnt = reply_to_list.count(msg.id)
|
||||||
msg.replies = []
|
msg.replies = []
|
||||||
for r in msg_replies:
|
for r in msg_replies:
|
||||||
@@ -1015,25 +1025,6 @@ def group_discuss(request, group_id):
|
|||||||
att.name = os.path.basename(path)
|
att.name = os.path.basename(path)
|
||||||
msg.attachment = att
|
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", {
|
return render_to_response("group/group_discuss.html", {
|
||||||
"members": members,
|
"members": members,
|
||||||
"group_id": group_id,
|
"group_id": group_id,
|
||||||
@@ -1041,11 +1032,6 @@ def group_discuss(request, group_id):
|
|||||||
"is_staff": is_staff,
|
"is_staff": is_staff,
|
||||||
"group_msgs": group_msgs,
|
"group_msgs": group_msgs,
|
||||||
"form": form,
|
"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,
|
'group_members_default_display': GROUP_MEMBERS_DEFAULT_DISPLAY,
|
||||||
}, context_instance=RequestContext(request));
|
}, 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