Merge pull request #1802 from gasman/pagination-helper-redo

Refactor pagination into a helper - rebuild of #1496
pull/1803/head
Matt Westcott 2015-10-07 23:24:24 +01:00
commit a596fd82f1
30 zmienionych plików z 169 dodań i 295 usunięć

Wyświetl plik

@ -1,10 +1,10 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate
from wagtail.wagtailsearch import forms as search_forms from wagtail.wagtailsearch import forms as search_forms
from wagtail.wagtailsearch.models import Query from wagtail.wagtailsearch.models import Query
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
@ -18,7 +18,6 @@ from wagtail.contrib.wagtailsearchpromotions import forms
@vary_on_headers('X-Requested-With') @vary_on_headers('X-Requested-With')
def index(request): def index(request):
is_searching = False is_searching = False
page = request.GET.get('p', 1)
query_string = request.GET.get('q', "") query_string = request.GET.get('q', "")
queries = Query.objects.filter(editors_picks__isnull=False).distinct() queries = Query.objects.filter(editors_picks__isnull=False).distinct()
@ -28,14 +27,7 @@ def index(request):
queries = queries.filter(query_string__icontains=query_string) queries = queries.filter(query_string__icontains=query_string)
is_searching = True is_searching = True
# Pagination paginator, queries = paginate(request, queries)
paginator = Paginator(queries, 20)
try:
queries = paginator.page(page)
except PageNotAnInteger:
queries = paginator.page(1)
except EmptyPage:
queries = paginator.page(paginator.num_pages)
if request.is_ajax(): if request.is_ajax():
return render(request, "wagtailsearchpromotions/results.html", { return render(request, "wagtailsearchpromotions/results.html", {

Wyświetl plik

@ -226,7 +226,7 @@
<section id="pagination"> <section id="pagination">
<h2>Pagination</h2> <h2>Pagination</h2>
{% include "wagtailadmin/shared/pagination_nav.html" with items=fake_pagination linkurl="wagtailadmin_explore" %} {% paginate example_page %}
</section> </section>
<section id="buttons"> <section id="buttons">

Wyświetl plik

@ -1,6 +1,7 @@
from django import forms from django import forms
from django.shortcuts import render from django.shortcuts import render
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.core.paginator import Paginator
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
@ -56,19 +57,11 @@ def index(request):
messages.button('', _('Edit')) messages.button('', _('Edit'))
]) ])
fake_pagination = { paginator = Paginator(list(range(100)), 10)
'number': 1, page = paginator.page(2)
'previous_page_number': 1,
'next_page_number': 2,
'has_previous': True,
'has_next': True,
'paginator': {
'num_pages': 10,
},
}
return render(request, 'wagtailstyleguide/base.html', { return render(request, 'wagtailstyleguide/base.html', {
'search_form': form, 'search_form': form,
'example_form': example_form, 'example_form': example_form,
'fake_pagination': fake_pagination, 'example_page': page,
}) })

Wyświetl plik

@ -1,12 +1,12 @@
from datetime import date from datetime import date
from django.db import models from django.db import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from modelcluster.fields import ParentalKey from modelcluster.fields import ParentalKey
from modelcluster.contrib.taggit import ClusterTaggableManager from modelcluster.contrib.taggit import ClusterTaggableManager
from taggit.models import TaggedItemBase from taggit.models import TaggedItemBase
from wagtail.utils.pagination import paginate
from wagtail.wagtailcore.models import Page, Orderable from wagtail.wagtailcore.models import Page, Orderable
from wagtail.wagtailcore.fields import RichTextField from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, \ from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, \
@ -334,15 +334,7 @@ class BlogIndexPage(Page):
if tag: if tag:
entries = entries.filter(tags__name=tag) entries = entries.filter(tags__name=tag)
# Pagination paginator, entries = paginate(request, entries, page_key='page', per_page=10)
page = request.GET.get('page')
paginator = Paginator(entries, 10) # Show 10 entries per page
try:
entries = paginator.page(page)
except PageNotAnInteger:
entries = paginator.page(1)
except EmptyPage:
entries = paginator.page(paginator.num_pages)
# Update template context # Update template context
context = super(BlogIndexPage, self).get_context(request) context = super(BlogIndexPage, self).get_context(request)

Wyświetl plik

@ -0,0 +1,17 @@
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
DEFAULT_PAGE_KEY = 'p'
def paginate(request, items, page_key=DEFAULT_PAGE_KEY, per_page=20):
page = request.GET.get(page_key, 1)
paginator = Paginator(items, per_page)
try:
page = paginator.page(page)
except PageNotAnInteger:
page = paginator.page(1)
except EmptyPage:
page = paginator.page(paginator.num_pages)
return paginator, page

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
<h2>{% trans "Explorer" %}</h2> <h2>{% trans "Explorer" %}</h2>
{% include "wagtailadmin/shared/breadcrumb.html" with page=parent_page choosing=1 %} {% include "wagtailadmin/shared/breadcrumb.html" with page=parent_page choosing=1 %}
@ -7,5 +7,5 @@
{% include "wagtailadmin/pages/listing/_list_choose.html" with allow_navigation=1 orderable=0 pages=pages parent_page=parent_page %} {% include "wagtailadmin/pages/listing/_list_choose.html" with allow_navigation=1 orderable=0 pages=pages parent_page=parent_page %}
{% url 'wagtailadmin_choose_page_child' parent_page.id as pagination_base_url %} {% url 'wagtailadmin_choose_page_child' parent_page.id as pagination_base_url %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url query_params=querystring classnames="navigate-pages" only %} {% paginate pages base_url=pagination_base_url classnames="navigate-pages" %}
{% endif %} {% endif %}

Wyświetl plik

@ -1,11 +1,11 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
{% trans "Add an email link" as email_str %} {% trans "Add an email link" as email_str %}
{% include "wagtailadmin/shared/header.html" with title=email_str %} {% include "wagtailadmin/shared/header.html" with title=email_str %}
<div class="nice-padding"> <div class="nice-padding">
{% include 'wagtailadmin/chooser/_link_types.html' with current='email' %} {% include 'wagtailadmin/chooser/_link_types.html' with current='email' %}
<form action="{% url 'wagtailadmin_choose_page_email_link' %}?{{ querystring }}" method="post"> <form action="{% url 'wagtailadmin_choose_page_email_link' %}?{% querystring %}" method="post">
{% csrf_token %} {% csrf_token %}
<ul class="fields"> <ul class="fields">
{% for field in form %} {% for field in form %}

Wyświetl plik

@ -1,11 +1,11 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
{% trans "Add an external link" as add_str %} {% trans "Add an external link" as add_str %}
{% include "wagtailadmin/shared/header.html" with title=add_str %} {% include "wagtailadmin/shared/header.html" with title=add_str %}
<div class="nice-padding"> <div class="nice-padding">
{% include 'wagtailadmin/chooser/_link_types.html' with current='external' %} {% include 'wagtailadmin/chooser/_link_types.html' with current='external' %}
<form action="{% url 'wagtailadmin_choose_page_external_link' %}?{{ querystring }}" method="post"> <form action="{% url 'wagtailadmin_choose_page_external_link' %}?{% querystring %}" method="post">
{% csrf_token %} {% csrf_token %}
<ul class="fields"> <ul class="fields">
{% for field in form %} {% for field in form %}

Wyświetl plik

@ -16,8 +16,10 @@
{% page_permissions parent_page as parent_page_perms %} {% page_permissions parent_page as parent_page_perms %}
{% include "wagtailadmin/pages/listing/_list_explore.html" with sortable=1 allow_navigation=1 full_width=1 show_ordering_column=1 parent_page=parent_page orderable=parent_page_perms.can_reorder_children %} {% include "wagtailadmin/pages/listing/_list_explore.html" with sortable=1 allow_navigation=1 full_width=1 show_ordering_column=1 parent_page=parent_page orderable=parent_page_perms.can_reorder_children %}
{% url 'wagtailadmin_explore' parent_page.id as pagination_base_url %} {% if do_paginate %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url query_params=pagination_query_params only %} {% url 'wagtailadmin_explore' parent_page.id as pagination_base_url %}
{% paginate pages base_url=pagination_base_url %}
{% endif %}
</form> </form>
{% endblock %} {% endblock %}

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
{% comment %} {% comment %}
Navigation controls for the page listing in 'choose' mode Navigation controls for the page listing in 'choose' mode
@ -6,6 +6,6 @@ Navigation controls for the page listing in 'choose' mode
<td class="{% if allow_navigation and page.can_descend %}children{% endif %}"> <td class="{% if allow_navigation and page.can_descend %}children{% endif %}">
{% if allow_navigation and page.can_descend %} {% if allow_navigation and page.can_descend %}
<a href="{% url 'wagtailadmin_choose_page_child' page.id %}?{{ querystring }}" class="icon text-replace icon-arrow-right navigate-pages" title="{% blocktrans with title=page.title %}Explore subpages of '{{ title }}'{% endblocktrans %}">{% trans 'Explore' %}</a> <a href="{% url 'wagtailadmin_choose_page_child' page.id %}?{% querystring page=None %}" class="icon text-replace icon-arrow-right navigate-pages" title="{% blocktrans with title=page.title %}Explore subpages of '{{ title }}'{% endblocktrans %}">{% trans 'Explore' %}</a>
{% endif %} {% endif %}
</td> </td>

Wyświetl plik

@ -1,32 +1,22 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
{% comment %} {% comment %}
Pagination include for page listings. Pagination for page listings. Used by the `{% paginate %}` template tag.
Accepts the following parameters:
page - a django.core.pagination Page object
base_url - a URL string that we can append ?p=page_number to
query_params - any additional query params to include in the link
(urlencoded but not html-escaped, and without the joining '&')
classnames - additional classnames to put on the <a> element
TODO: Port all existing uses of shared/_pagination_nav.html over to this new API (extending the API as necessary to cover special cases), so that this can become a replacement for shared/_pagination_nav.html.
{% endcomment %} {% endcomment %}
<div class="pagination"> <div class="pagination">
<p>{% blocktrans with page_number=page.number num_pages=page.paginator.num_pages %} <p>{% blocktrans with page_number=page.number num_pages=paginator.num_pages %}
Page {{ page_number }} of {{ num_pages }}. Page {{ page_number }} of {{ num_pages }}.
{% endblocktrans %}</p> {% endblocktrans %}</p>
<ul> <ul>
<li class="prev"> <li class="prev">
{% if page.has_previous %} {% if page.has_previous %}
<a href="{{ base_url }}?p={{ page.previous_page_number }}{% if query_params %}&amp;{{ query_params }}{% endif %}" class="icon icon-arrow-left {{ classnames }}">{% trans "Previous" %}</a> <a data-page="{{ page.previous_page_number }}" href="{{ base_url }}{% pagination_querystring page.previous_page_number page_key=page_key %}" class="icon icon-arrow-left {{ classnames }}">{% trans "Previous" %}</a>
{% endif %} {% endif %}
</li> </li>
<li class="next"> <li class="next">
{% if page.has_next %} {% if page.has_next %}
<a href="{{ base_url }}?p={{ page.next_page_number }}{% if query_params %}&amp;{{ query_params }}{% endif %}" class="icon icon-arrow-right-after {{ classnames }}">{% trans 'Next' %}</a> <a data-page="{{ page.next_page_number }}" href="{{ base_url }}{% pagination_querystring page.next_page_number page_key=page_key %}" class="icon icon-arrow-right-after {{ classnames }}">{% trans "Next" %}</a>
{% endif %} {% endif %}
</li> </li>
</ul> </ul>

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
<div class="nice-padding"> <div class="nice-padding">
{% if pages %} {% if pages %}
<h2> <h2>
@ -21,7 +21,7 @@
{% include "wagtailadmin/pages/listing/_list_explore.html" with show_parent=1 allow_navigation=0 %} {% include "wagtailadmin/pages/listing/_list_explore.html" with show_parent=1 allow_navigation=0 %}
{% url 'wagtailadmin_pages:search' as pagination_base_url %} {% url 'wagtailadmin_pages:search' as pagination_base_url %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url query_params=pagination_query_params only %} {% paginate pages base_url=pagination_base_url %}
{% else %} {% else %}
{% if query_string %} {% if query_string %}
<p>{% blocktrans %}Sorry, no pages match <em>"{{ query_string }}"</em>{% endblocktrans %}</p> <p>{% blocktrans %}Sorry, no pages match <em>"{{ query_string }}"</em>{% endblocktrans %}</p>

Wyświetl plik

@ -1,10 +1,10 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
<div class="nice-padding"> <div class="nice-padding">
{% if pages %} {% if pages %}
{% include "wagtailadmin/pages/listing/_list_explore.html" with show_parent=1 allow_navigation=0 %} {% include "wagtailadmin/pages/listing/_list_explore.html" with show_parent=1 allow_navigation=0 %}
{% url 'wagtailadmin_pages:type_use' app_name content_type.model as pagination_base_url %} {% url 'wagtailadmin_pages:type_use' app_name content_type.model as pagination_base_url %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url only %} {% paginate pages base_url=pagination_base_url %}
{% else %} {% else %}
<p>{% trans 'No pages use' %}<em>"{{ page_class.get_verbose_name }}"</em>.</p> <p>{% trans 'No pages use' %}<em>"{{ page_class.get_verbose_name }}"</em>.</p>
{% endif %} {% endif %}

Wyświetl plik

@ -11,6 +11,8 @@ from wagtail.wagtailcore.utils import camelcase_to_underscore, escape_script
from wagtail.wagtailcore.utils import cautious_slugify as _cautious_slugify from wagtail.wagtailcore.utils import cautious_slugify as _cautious_slugify
from wagtail.wagtailadmin.menu import admin_menu from wagtail.wagtailadmin.menu import admin_menu
from wagtail.utils.pagination import DEFAULT_PAGE_KEY
register = template.Library() register = template.Library()
@ -182,3 +184,78 @@ def has_unrendered_errors(bound_field):
@stringfilter @stringfilter
def cautious_slugify(value): def cautious_slugify(value):
return _cautious_slugify(value) return _cautious_slugify(value)
@register.simple_tag(takes_context=True)
def querystring(context, **kwargs):
"""
Print out the current querystring. Any keyword arguments to this template
tag will be added to the querystring before it is printed out.
<a href="/page/{% querystring key='value' %}">
Will result in something like:
<a href="/page/?foo=bar&key=value">
"""
request = context['request']
querydict = request.GET.copy()
# Can't do querydict.update(kwargs), because QueryDict.update() appends to
# the list of values, instead of replacing the values.
for key, value in kwargs.items():
if value is None:
# Remove the key if the value is None
querydict.pop(key, None)
else:
# Set the key otherwise
querydict[key] = value
return '?' + querydict.urlencode()
@register.simple_tag(takes_context=True)
def pagination_querystring(context, page_number, page_key=DEFAULT_PAGE_KEY):
"""
Print out a querystring with an updated page number:
{% if page.has_next_page %}
<a href="{% pagination_link page.next_page_number %}">Next page</a>
{% endif %}
"""
return querystring(context, **{page_key: page_number})
@register.inclusion_tag("wagtailadmin/pages/listing/_pagination.html",
takes_context=True)
def paginate(context, page, base_url='', page_key=DEFAULT_PAGE_KEY,
classnames=''):
"""
Print pagination previous/next links, and the page count. Take the
following arguments:
page
The current page of results. This should be a Django pagination `Page`
instance
base_url
The base URL of the next/previous page, with no querystring.
This is optional, and defaults to the current page by just printing the
querystring for the next/previous page.
page_key
The name of the page variable in the query string. Defaults to the same
name as used in the :func:`~wagtail.utils.pagination.paginate`
function.
classnames
Extra classes to add to the next/previous links.
"""
request = context['request']
return {
'base_url': base_url,
'classnames': classnames,
'request': request,
'page': page,
'page_key': page_key,
'paginator': page.paginator,
}

Wyświetl plik

@ -5,8 +5,7 @@ from django.test import TestCase
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission from django.contrib.auth.models import Group, Permission
from django.core import mail from django.core import mail, paginator
from django.core.paginator import Paginator
from django.db.models.signals import pre_delete, post_delete from django.db.models.signals import pre_delete, post_delete
from django.utils import timezone from django.utils import timezone
@ -80,7 +79,7 @@ class TestPageExplorer(TestCase, WagtailTestUtils):
self.assertEqual(response.context['ordering'], 'ord') self.assertEqual(response.context['ordering'], 'ord')
# Pages must not be paginated # Pages must not be paginated
self.assertNotIsInstance(response.context['pages'], Paginator) self.assertNotIsInstance(response.context['pages'], paginator.Page)
def make_pages(self): def make_pages(self):
for i in range(150): for i in range(150):

Wyświetl plik

@ -1,8 +1,7 @@
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.http import Http404 from django.http import Http404
from django.utils.http import urlencode
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailadmin.forms import SearchForm, ExternalLinkChooserForm, ExternalLinkChooserWithLinkTextForm, EmailLinkChooserForm, EmailLinkChooserWithLinkTextForm from wagtail.wagtailadmin.forms import SearchForm, ExternalLinkChooserForm, ExternalLinkChooserWithLinkTextForm, EmailLinkChooserForm, EmailLinkChooserWithLinkTextForm
@ -10,20 +9,10 @@ from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.utils import resolve_model_string from wagtail.wagtailcore.utils import resolve_model_string
def get_querystring(request):
return urlencode({
'page_type': request.GET.get('page_type', ''),
'allow_external_link': request.GET.get('allow_external_link', ''),
'allow_email_link': request.GET.get('allow_email_link', ''),
'prompt_for_link_text': request.GET.get('prompt_for_link_text', ''),
})
def shared_context(request, extra_context={}): def shared_context(request, extra_context={}):
context = { context = {
'allow_external_link': request.GET.get('allow_external_link'), 'allow_external_link': request.GET.get('allow_external_link'),
'allow_email_link': request.GET.get('allow_email_link'), 'allow_email_link': request.GET.get('allow_email_link'),
'querystring': get_querystring(request),
} }
context.update(extra_context) context.update(extra_context)
return context return context
@ -86,14 +75,7 @@ def browse(request, parent_page_id=None):
# Pagination # Pagination
# We apply pagination first so we don't need to walk the entire list # We apply pagination first so we don't need to walk the entire list
# in the block below # in the block below
p = request.GET.get('p', 1) paginator, pages = paginate(request, pages, per_page=25)
paginator = Paginator(pages, 25)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
# Annotate each page with can_choose/can_decend flags # Annotate each page with can_choose/can_decend flags
for page in pages: for page in pages:

Wyświetl plik

@ -2,7 +2,6 @@ from django.http import Http404, HttpResponse
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.core.exceptions import ValidationError, PermissionDenied from django.core.exceptions import ValidationError, PermissionDenied
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
@ -11,6 +10,7 @@ from django.views.decorators.http import require_GET, require_POST
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from django.db.models import Count from django.db.models import Count
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList
from wagtail.wagtailadmin.forms import SearchForm, CopyForm from wagtail.wagtailadmin.forms import SearchForm, CopyForm
from wagtail.wagtailadmin.utils import send_notification from wagtail.wagtailadmin.utils import send_notification
@ -43,26 +43,20 @@ def index(request, parent_page_id=None):
ordering = '-latest_revision_created_at' ordering = '-latest_revision_created_at'
# Pagination # Pagination
if ordering != 'ord': # Don't paginate if sorting by page order - all pages must be shown to
ordering_no_minus = ordering # allow drag-and-drop reordering
if ordering_no_minus.startswith('-'): do_paginate = ordering != 'ord'
ordering_no_minus = ordering[1:] if do_paginate:
ordering_no_minus = ordering.lstrip('-')
pages = pages.order_by(ordering).annotate(null_position=Count(ordering_no_minus)).order_by('-null_position', ordering) pages = pages.order_by(ordering).annotate(null_position=Count(ordering_no_minus)).order_by('-null_position', ordering)
paginator, pages = paginate(request, pages, per_page=50)
p = request.GET.get('p', 1)
paginator = Paginator(pages, 50)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
return render(request, 'wagtailadmin/pages/index.html', { return render(request, 'wagtailadmin/pages/index.html', {
'parent_page': parent_page, 'parent_page': parent_page,
'ordering': ordering, 'ordering': ordering,
'pagination_query_params': "ordering=%s" % ordering, 'pagination_query_params': "ordering=%s" % ordering,
'pages': pages, 'pages': pages,
'do_paginate': do_paginate,
}) })
@ -93,8 +87,6 @@ def content_type_use(request, content_type_app_name, content_type_model_name):
except ContentType.DoesNotExist: except ContentType.DoesNotExist:
raise Http404 raise Http404
p = request.GET.get("p", 1)
page_class = content_type.model_class() page_class = content_type.model_class()
# page_class must be a Page type and not some other random model # page_class must be a Page type and not some other random model
@ -103,14 +95,7 @@ def content_type_use(request, content_type_app_name, content_type_model_name):
pages = page_class.objects.all() pages = page_class.objects.all()
paginator = Paginator(pages, 10) paginator, pages = paginate(request, pages, per_page=10)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
return render(request, 'wagtailadmin/pages/content_type_use.html', { return render(request, 'wagtailadmin/pages/content_type_use.html', {
'pages': pages, 'pages': pages,
@ -690,18 +675,8 @@ def search(request):
if form.is_valid(): if form.is_valid():
q = form.cleaned_data['q'] q = form.cleaned_data['q']
# page number
p = request.GET.get("p", 1)
pages = Page.objects.all().prefetch_related('content_type').search(q, fields=['title']) pages = Page.objects.all().prefetch_related('content_type').search(q, fields=['title'])
paginator, pages = paginate(request, pages)
# Pagination
paginator = Paginator(pages, 20)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
else: else:
form = SearchForm() form = SearchForm()

Wyświetl plik

@ -2,8 +2,8 @@ import json
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required from wagtail.wagtailadmin.utils import permission_required
@ -48,15 +48,7 @@ def chooser(request):
is_searching = False is_searching = False
# Pagination # Pagination
p = request.GET.get("p", 1) paginator, documents = paginate(request, documents, per_page=10)
paginator = Paginator(documents, 10)
try:
documents = paginator.page(p)
except PageNotAnInteger:
documents = paginator.page(1)
except EmptyPage:
documents = paginator.page(paginator.num_pages)
return render(request, "wagtaildocs/chooser/results.html", { return render(request, "wagtaildocs/chooser/results.html", {
'documents': documents, 'documents': documents,
@ -67,15 +59,7 @@ def chooser(request):
searchform = SearchForm() searchform = SearchForm()
documents = Document.objects.order_by('-created_at') documents = Document.objects.order_by('-created_at')
p = request.GET.get("p", 1) paginator, documents = paginate(request, documents, per_page=10)
paginator = Paginator(documents, 10)
try:
documents = paginator.page(p)
except PageNotAnInteger:
documents = paginator.page(1)
except EmptyPage:
documents = paginator.page(paginator.num_pages)
return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', { return render_modal_workflow(request, 'wagtaildocs/chooser/chooser.html', 'wagtaildocs/chooser/chooser.js', {
'documents': documents, 'documents': documents,

Wyświetl plik

@ -1,10 +1,10 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required, any_permission_required from wagtail.wagtailadmin.utils import permission_required, any_permission_required
from wagtail.wagtailsearch.backends import get_search_backends from wagtail.wagtailsearch.backends import get_search_backends
@ -43,15 +43,7 @@ def index(request):
form = SearchForm(placeholder=_("Search documents")) form = SearchForm(placeholder=_("Search documents"))
# Pagination # Pagination
p = request.GET.get('p', 1) paginator, documents = paginate(request, documents)
paginator = Paginator(documents, 20)
try:
documents = paginator.page(p)
except PageNotAnInteger:
documents = paginator.page(1)
except EmptyPage:
documents = paginator.page(paginator.num_pages)
# Create response # Create response
if request.is_ajax(): if request.is_ajax():
@ -170,16 +162,7 @@ def delete(request, document_id):
def usage(request, document_id): def usage(request, document_id):
doc = get_object_or_404(Document, id=document_id) doc = get_object_or_404(Document, id=document_id)
# Pagination paginator, used_by = paginate(request, doc.get_usage())
p = request.GET.get('p', 1)
paginator = Paginator(doc.get_usage(), 20)
try:
used_by = paginator.page(p)
except PageNotAnInteger:
used_by = paginator.page(1)
except EmptyPage:
used_by = paginator.page(paginator.num_pages)
return render(request, "wagtaildocs/documents/usage.html", { return render(request, "wagtaildocs/documents/usage.html", {
'document': doc, 'document': doc,

Wyświetl plik

@ -2,30 +2,22 @@ import datetime
import csv import csv
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.http import HttpResponse from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render, redirect from django.shortcuts import get_object_or_404, render, redirect
from django.utils.encoding import smart_str from django.utils.encoding import smart_str
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from wagtail.utils.pagination import paginate
from wagtail.wagtailcore.models import Page from wagtail.wagtailcore.models import Page
from wagtail.wagtailforms.models import FormSubmission, get_forms_for_user from wagtail.wagtailforms.models import FormSubmission, get_forms_for_user
from wagtail.wagtailforms.forms import SelectDateForm from wagtail.wagtailforms.forms import SelectDateForm
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
def index(request): def index(request):
p = request.GET.get("p", 1)
form_pages = get_forms_for_user(request.user) form_pages = get_forms_for_user(request.user)
paginator = Paginator(form_pages, 20) paginator, form_pages = paginate(request, form_pages)
try:
form_pages = paginator.page(p)
except PageNotAnInteger:
form_pages = paginator.page(1)
except EmptyPage:
form_pages = paginator.page(paginator.num_pages)
return render(request, 'wagtailforms/index.html', { return render(request, 'wagtailforms/index.html', {
'form_pages': form_pages, 'form_pages': form_pages,
@ -95,15 +87,7 @@ def list_submissions(request, page_id):
writer.writerow(data_row) writer.writerow(data_row)
return response return response
p = request.GET.get('p', 1) paginator, submissions = paginate(request, submissions)
paginator = Paginator(submissions, 20)
try:
submissions = paginator.page(p)
except PageNotAnInteger:
submissions = paginator.page(1)
except EmptyPage:
submissions = paginator.page(paginator.num_pages)
data_headings = [label for name, label in data_fields] data_headings = [label for name, label in data_fields]
data_rows = [] data_rows = []

Wyświetl plik

@ -2,8 +2,8 @@ import json
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.shortcuts import get_object_or_404, render from django.shortcuts import get_object_or_404, render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required from wagtail.wagtailadmin.utils import permission_required
@ -55,15 +55,7 @@ def chooser(request):
is_searching = False is_searching = False
# Pagination # Pagination
page_number = request.GET.get("p", 1) paginator, images = paginate(request, images, per_page=12)
paginator = Paginator(images, 12)
try:
images = paginator.page(page_number)
except PageNotAnInteger:
images = paginator.page(1)
except EmptyPage:
images = paginator.page(paginator.num_pages)
return render(request, "wagtailimages/chooser/results.html", { return render(request, "wagtailimages/chooser/results.html", {
'images': images, 'images': images,
@ -75,15 +67,7 @@ def chooser(request):
searchform = SearchForm() searchform = SearchForm()
images = Image.objects.order_by('-created_at') images = Image.objects.order_by('-created_at')
p = request.GET.get("p", 1) paginator, images = paginate(request, images, per_page=12)
paginator = Paginator(images, 12)
try:
images = paginator.page(p)
except PageNotAnInteger:
images = paginator.page(1)
except EmptyPage:
images = paginator.page(paginator.num_pages)
return render_modal_workflow(request, 'wagtailimages/chooser/chooser.html', 'wagtailimages/chooser/chooser.js', { return render_modal_workflow(request, 'wagtailimages/chooser/chooser.html', 'wagtailimages/chooser/chooser.js', {
'images': images, 'images': images,

Wyświetl plik

@ -1,13 +1,13 @@
import os import os
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.exceptions import PermissionDenied from django.core.exceptions import PermissionDenied
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from django.core.urlresolvers import reverse, NoReverseMatch from django.core.urlresolvers import reverse, NoReverseMatch
from django.http import HttpResponse, JsonResponse from django.http import HttpResponse, JsonResponse
from wagtail.utils.pagination import paginate
from wagtail.wagtailcore.models import Site from wagtail.wagtailcore.models import Site
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
@ -44,16 +44,7 @@ def index(request):
else: else:
form = SearchForm(placeholder=_("Search images")) form = SearchForm(placeholder=_("Search images"))
# Pagination paginator, images = paginate(request, images)
p = request.GET.get('p', 1)
paginator = Paginator(images, 20)
try:
images = paginator.page(p)
except PageNotAnInteger:
images = paginator.page(1)
except EmptyPage:
images = paginator.page(paginator.num_pages)
# Create response # Create response
if request.is_ajax(): if request.is_ajax():
@ -253,16 +244,7 @@ def add(request):
def usage(request, image_id): def usage(request, image_id):
image = get_object_or_404(get_image_model(), id=image_id) image = get_object_or_404(get_image_model(), id=image_id)
# Pagination paginator, used_by = paginate(request, image.get_usage())
p = request.GET.get('p', 1)
paginator = Paginator(image.get_usage(), 20)
try:
used_by = paginator.page(p)
except PageNotAnInteger:
used_by = paginator.page(1)
except EmptyPage:
used_by = paginator.page(paginator.num_pages)
return render(request, "wagtailimages/images/usage.html", { return render(request, "wagtailimages/images/usage.html", {
'image': image, 'image': image,

Wyświetl plik

@ -1,14 +1,13 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.edit_handlers import ObjectList from wagtail.wagtailadmin.edit_handlers import ObjectList
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required, any_permission_required from wagtail.wagtailadmin.utils import permission_required, any_permission_required
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
from wagtail.wagtailredirects import models from wagtail.wagtailredirects import models
@ -18,7 +17,6 @@ REDIRECT_EDIT_HANDLER = ObjectList(models.Redirect.content_panels).bind_to_model
@any_permission_required('wagtailredirects.add_redirect', 'wagtailredirects.change_redirect', 'wagtailredirects.delete_redirect') @any_permission_required('wagtailredirects.add_redirect', 'wagtailredirects.change_redirect', 'wagtailredirects.delete_redirect')
@vary_on_headers('X-Requested-With') @vary_on_headers('X-Requested-With')
def index(request): def index(request):
page = request.GET.get('p', 1)
query_string = request.GET.get('q', "") query_string = request.GET.get('q', "")
ordering = request.GET.get('ordering', 'old_path') ordering = request.GET.get('ordering', 'old_path')
@ -36,13 +34,7 @@ def index(request):
redirects = redirects.order_by(ordering) redirects = redirects.order_by(ordering)
# Pagination # Pagination
paginator = Paginator(redirects, 20) paginator, redirects = paginate(request, redirects)
try:
redirects = paginator.page(page)
except PageNotAnInteger:
redirects = paginator.page(1)
except EmptyPage:
redirects = paginator.page(paginator.num_pages)
# Render template # Render template
if request.is_ajax(): if request.is_ajax():

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %} {% load i18n wagtailadmin_tags %}
<table class="listing chooser"> <table class="listing chooser">
<col width="50%"/> <col width="50%"/>
<col width="50%"/> <col width="50%"/>
@ -24,4 +24,4 @@
</tbody> </tbody>
</table> </table>
{% include "wagtailadmin/shared/pagination_nav.html" with items=queries is_ajax=1 %} {% paginate queries %}

Wyświetl plik

@ -130,7 +130,6 @@ class TestQueryChooserView(TestCase, WagtailTestUtils):
def test_search(self): def test_search(self):
response = self.get({'q': "Hello"}) response = self.get({'q': "Hello"})
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['query_string'], "Hello")
def test_pagination(self): def test_pagination(self):
pages = ['0', '1', '-1', '9999', 'Not a page'] pages = ['0', '1', '-1', '9999', 'Not a page']

Wyświetl plik

@ -1,6 +1,6 @@
from django.shortcuts import render from django.shortcuts import render
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
@ -22,28 +22,17 @@ def chooser(request, get_results=False):
else: else:
searchform = SearchForm() searchform = SearchForm()
# Pagination paginator, queries = paginate(request, queries, per_page=10)
p = request.GET.get('p', 1)
paginator = Paginator(queries, 10)
try:
queries = paginator.page(p)
except PageNotAnInteger:
queries = paginator.page(1)
except EmptyPage:
queries = paginator.page(paginator.num_pages)
# Render # Render
if get_results: if get_results:
return render(request, "wagtailsearch/queries/chooser/results.html", { return render(request, "wagtailsearch/queries/chooser/results.html", {
'queries': queries, 'queries': queries,
'query_string': query_string,
}) })
else: else:
return render_modal_workflow(request, 'wagtailsearch/queries/chooser/chooser.html', 'wagtailsearch/queries/chooser/chooser.js', { return render_modal_workflow(request, 'wagtailsearch/queries/chooser/chooser.html', 'wagtailsearch/queries/chooser/chooser.js', {
'queries': queries, 'queries': queries,
'searchform': searchform, 'searchform': searchform,
'query_string': query_string,
}) })

Wyświetl plik

@ -1,11 +1,11 @@
import json import json
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.shortcuts import render, get_object_or_404 from django.shortcuts import render, get_object_or_404
from django.utils.six import text_type from django.utils.six import text_type
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.modal_workflow import render_modal_workflow from wagtail.wagtailadmin.modal_workflow import render_modal_workflow
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailsearch.index import class_is_indexed from wagtail.wagtailsearch.index import class_is_indexed
@ -43,15 +43,7 @@ def choose(request, content_type_app_name, content_type_model_name):
}) })
# Pagination # Pagination
p = request.GET.get("p", 1) paginator, paginated_items = paginate(request, items, per_page=25)
paginator = Paginator(items, 25)
try:
paginated_items = paginator.page(p)
except PageNotAnInteger:
paginated_items = paginator.page(1)
except EmptyPage:
paginated_items = paginator.page(paginator.num_pages)
# If paginating or searching, render "results.html" # If paginating or searching, render "results.html"
if request.GET.get('results', None) == 'true': if request.GET.get('results', None) == 'true':

Wyświetl plik

@ -5,8 +5,8 @@ from django.utils.text import capfirst
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.edit_handlers import ObjectList, extract_panel_definitions_from_model_class from wagtail.wagtailadmin.edit_handlers import ObjectList, extract_panel_definitions_from_model_class
from wagtail.wagtailadmin.utils import permission_denied from wagtail.wagtailadmin.utils import permission_denied
@ -113,16 +113,7 @@ def list(request, content_type_app_name, content_type_model_name):
'snippet_type_name': snippet_type_name_plural 'snippet_type_name': snippet_type_name_plural
}) })
# Pagination paginator, paginated_items = paginate(request, items)
p = request.GET.get('p', 1)
paginator = Paginator(items, 20)
try:
paginated_items = paginator.page(p)
except PageNotAnInteger:
paginated_items = paginator.page(1)
except EmptyPage:
paginated_items = paginator.page(paginator.num_pages)
# Template # Template
if request.is_ajax(): if request.is_ajax():
@ -269,16 +260,7 @@ def usage(request, content_type_app_name, content_type_model_name, id):
model = content_type.model_class() model = content_type.model_class()
instance = get_object_or_404(model, id=id) instance = get_object_or_404(model, id=id)
# Pagination paginator, used_by = paginate(request, instance.get_usage())
p = request.GET.get('p', 1)
paginator = Paginator(instance.get_usage(), 20)
try:
used_by = paginator.page(p)
except PageNotAnInteger:
used_by = paginator.page(1)
except EmptyPage:
used_by = paginator.page(paginator.num_pages)
return render(request, "wagtailsnippets/snippets/usage.html", { return render(request, "wagtailsnippets/snippets/usage.html", {
'instance': instance, 'instance': instance,

Wyświetl plik

@ -1,10 +1,10 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required, any_permission_required from wagtail.wagtailadmin.utils import permission_required, any_permission_required
@ -15,7 +15,6 @@ from wagtail.wagtailusers.forms import GroupForm, GroupPagePermissionFormSet
@vary_on_headers('X-Requested-With') @vary_on_headers('X-Requested-With')
def index(request): def index(request):
q = None q = None
p = request.GET.get("p", 1)
is_searching = False is_searching = False
if 'q' in request.GET: if 'q' in request.GET:
@ -42,14 +41,7 @@ def index(request):
else: else:
ordering = 'name' ordering = 'name'
paginator = Paginator(groups, 20) paginator, groups = paginate(request, groups)
try:
groups = paginator.page(p)
except PageNotAnInteger:
groups = paginator.page(1)
except EmptyPage:
groups = paginator.page(paginator.num_pages)
if request.is_ajax(): if request.is_ajax():
return render(request, "wagtailusers/groups/results.html", { return render(request, "wagtailusers/groups/results.html", {

Wyświetl plik

@ -1,11 +1,11 @@
from django.shortcuts import render, redirect, get_object_or_404 from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.db.models import Q from django.db.models import Q
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin import messages from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required, any_permission_required from wagtail.wagtailadmin.utils import permission_required, any_permission_required
@ -26,7 +26,6 @@ delete_user_perm = "{0}.delete_{1}".format(AUTH_USER_APP_LABEL, AUTH_USER_MODEL_
@vary_on_headers('X-Requested-With') @vary_on_headers('X-Requested-With')
def index(request): def index(request):
q = None q = None
p = request.GET.get("p", 1)
is_searching = False is_searching = False
if 'q' in request.GET: if 'q' in request.GET:
@ -56,14 +55,7 @@ def index(request):
else: else:
ordering = 'name' ordering = 'name'
paginator = Paginator(users, 20) paginator, users = paginate(request, users)
try:
users = paginator.page(p)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
if request.is_ajax(): if request.is_ajax():
return render(request, "wagtailusers/users/results.html", { return render(request, "wagtailusers/users/results.html", {