diff --git a/django_messages/templates/django_messages/_pagination.html b/django_messages/templates/django_messages/_pagination.html new file mode 100644 index 0000000..41ffddd --- /dev/null +++ b/django_messages/templates/django_messages/_pagination.html @@ -0,0 +1,18 @@ +{% load i18n %} +
{% trans "No messages." %}
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_messages/templates/django_messages/outbox.html b/django_messages/templates/django_messages/outbox.html index 966ad8c..5fd5c66 100644 --- a/django_messages/templates/django_messages/outbox.html +++ b/django_messages/templates/django_messages/outbox.html @@ -21,7 +21,11 @@{% trans "No messages." %}
{% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_messages/templates/django_messages/trash.html b/django_messages/templates/django_messages/trash.html index 8d77ddc..d9ee544 100644 --- a/django_messages/templates/django_messages/trash.html +++ b/django_messages/templates/django_messages/trash.html @@ -21,9 +21,13 @@{% trans "No messages." %}
{% endif %}{% trans "Deleted Messages are removed from the trash at unregular intervals, don't rely on this feature for long-time storage." %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/django_messages/utils.py b/django_messages/utils.py index c277424..edc94dd 100644 --- a/django_messages/utils.py +++ b/django_messages/utils.py @@ -4,6 +4,7 @@ from django.utils.translation import ugettext, ugettext_lazy as _ from django.template.loader import render_to_string from django.conf import settings +from django.core.paginator import Paginator, InvalidPage # favour django-mailer but fall back to django.core.mail @@ -12,6 +13,10 @@ else: from django.core.mail import send_mail + +PAGE_LENGTH = getattr(settings, 'DJANGO_MESSAGES_PAGE_LENGTH', -1) + + def format_quote(sender, body): """ Wraps text at 55 chars and prepends each @@ -101,3 +106,15 @@ def get_username_field(): return get_user_model().USERNAME_FIELD else: return 'username' + + +def paginate_queryset(request, qs): + if PAGE_LENGTH == -1: + # Disable pagination + return qs + paginator = Paginator(qs, PAGE_LENGTH) + page_num = request.GET.get('page', 1) + try: + return paginator.page(page_num) + except InvalidPage: + return paginator.page(1) diff --git a/django_messages/views.py b/django_messages/views.py index 4f1d4ff..ca762bc 100644 --- a/django_messages/views.py +++ b/django_messages/views.py @@ -13,7 +13,8 @@ from django_messages.models import Message from django_messages.forms import ComposeForm -from django_messages.utils import format_quote, get_user_model, get_username_field +from django_messages.utils import format_quote, get_user_model, get_username_field, paginate_queryset + User = get_user_model() @@ -29,7 +30,10 @@ def inbox(request, template_name='django_messages/inbox.html'): Optional Arguments: ``template_name``: name of the template to use. """ - message_list = Message.objects.inbox_for(request.user) + message_list = paginate_queryset( + request, + Message.objects.inbox_for(request.user) + ) return render(request, template_name, { 'message_list': message_list, }) @@ -41,7 +45,10 @@ def outbox(request, template_name='django_messages/outbox.html'): Optional arguments: ``template_name``: name of the template to use. """ - message_list = Message.objects.outbox_for(request.user) + message_list = paginate_queryset( + request, + Message.objects.outbox_for(request.user) + ) return render(request, template_name, { 'message_list': message_list, }) @@ -55,7 +62,10 @@ def trash(request, template_name='django_messages/trash.html'): Hint: A Cron-Job could periodicly clean up old messages, which are deleted by sender and recipient. """ - message_list = Message.objects.trash_for(request.user) + message_list = paginate_queryset( + request, + Message.objects.trash_for(request.user) + ) return render(request, template_name, { 'message_list': message_list, }) diff --git a/docs/usage.txt b/docs/usage.txt index 7e4405c..9009b79 100644 --- a/docs/usage.txt +++ b/docs/usage.txt @@ -90,6 +90,14 @@ And now every Template Context will contain a variable named Settings Options ---------------- +By default, message list is not paginated, you can enable pagination by +adding the following to your ``settings.py``:: + + DJANGO_MESSAGES_PAGE_LENGTH = 50 # or whatever number you want + +To disable pagination remove the setting variable or set it to -1. + + If you do want to disable django-messages from sending either a 'pinax-notifications' notice or an email (fallback if 'pinax-notifications not installed' then set the following in your django settings::