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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -1,12 +1,12 @@
from datetime import date
from django.db import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from modelcluster.fields import ParentalKey
from modelcluster.contrib.taggit import ClusterTaggableManager
from taggit.models import TaggedItemBase
from wagtail.utils.pagination import paginate
from wagtail.wagtailcore.models import Page, Orderable
from wagtail.wagtailcore.fields import RichTextField
from wagtail.wagtailadmin.edit_handlers import FieldPanel, MultiFieldPanel, \
@ -334,15 +334,7 @@ class BlogIndexPage(Page):
if tag:
entries = entries.filter(tags__name=tag)
# Pagination
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)
paginator, entries = paginate(request, entries, page_key='page', per_page=10)
# Update template context
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>
{% 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 %}
{% 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 %}

Wyświetl plik

@ -1,11 +1,11 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
{% trans "Add an email link" as email_str %}
{% include "wagtailadmin/shared/header.html" with title=email_str %}
<div class="nice-padding">
{% 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 %}
<ul class="fields">
{% 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 %}
{% include "wagtailadmin/shared/header.html" with title=add_str %}
<div class="nice-padding">
{% 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 %}
<ul class="fields">
{% for field in form %}

Wyświetl plik

@ -16,8 +16,10 @@
{% 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 %}
{% url 'wagtailadmin_explore' parent_page.id as pagination_base_url %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url query_params=pagination_query_params only %}
{% if do_paginate %}
{% url 'wagtailadmin_explore' parent_page.id as pagination_base_url %}
{% paginate pages base_url=pagination_base_url %}
{% endif %}
</form>
{% endblock %}

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
{% comment %}
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 %}">
{% 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 %}
</td>

Wyświetl plik

@ -1,32 +1,22 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
{% comment %}
Pagination include for page listings.
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.
Pagination for page listings. Used by the `{% paginate %}` template tag.
{% endcomment %}
<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 }}.
{% endblocktrans %}</p>
<ul>
<li class="prev">
{% 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 %}
</li>
<li class="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 %}
</li>
</ul>

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
<div class="nice-padding">
{% if pages %}
<h2>
@ -21,7 +21,7 @@
{% include "wagtailadmin/pages/listing/_list_explore.html" with show_parent=1 allow_navigation=0 %}
{% 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 %}
{% if query_string %}
<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">
{% if pages %}
{% 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 %}
{% include "wagtailadmin/pages/listing/_pagination.html" with page=pages base_url=pagination_base_url only %}
{% paginate pages base_url=pagination_base_url %}
{% else %}
<p>{% trans 'No pages use' %}<em>"{{ page_class.get_verbose_name }}"</em>.</p>
{% 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.wagtailadmin.menu import admin_menu
from wagtail.utils.pagination import DEFAULT_PAGE_KEY
register = template.Library()
@ -182,3 +184,78 @@ def has_unrendered_errors(bound_field):
@stringfilter
def 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.contrib.auth import get_user_model
from django.contrib.auth.models import Group, Permission
from django.core import mail
from django.core.paginator import Paginator
from django.core import mail, paginator
from django.db.models.signals import pre_delete, post_delete
from django.utils import timezone
@ -80,7 +79,7 @@ class TestPageExplorer(TestCase, WagtailTestUtils):
self.assertEqual(response.context['ordering'], 'ord')
# Pages must not be paginated
self.assertNotIsInstance(response.context['pages'], Paginator)
self.assertNotIsInstance(response.context['pages'], paginator.Page)
def make_pages(self):
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.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.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
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={}):
context = {
'allow_external_link': request.GET.get('allow_external_link'),
'allow_email_link': request.GET.get('allow_email_link'),
'querystring': get_querystring(request),
}
context.update(extra_context)
return context
@ -86,14 +75,7 @@ def browse(request, parent_page_id=None):
# Pagination
# We apply pagination first so we don't need to walk the entire list
# in the block below
p = request.GET.get('p', 1)
paginator = Paginator(pages, 25)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
paginator, pages = paginate(request, pages, per_page=25)
# Annotate each page with can_choose/can_decend flags
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.core.exceptions import ValidationError, PermissionDenied
from django.contrib.contenttypes.models import ContentType
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.utils import timezone
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.db.models import Count
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.edit_handlers import TabbedInterface, ObjectList
from wagtail.wagtailadmin.forms import SearchForm, CopyForm
from wagtail.wagtailadmin.utils import send_notification
@ -43,26 +43,20 @@ def index(request, parent_page_id=None):
ordering = '-latest_revision_created_at'
# Pagination
if ordering != 'ord':
ordering_no_minus = ordering
if ordering_no_minus.startswith('-'):
ordering_no_minus = ordering[1:]
# Don't paginate if sorting by page order - all pages must be shown to
# allow drag-and-drop reordering
do_paginate = ordering != 'ord'
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)
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)
paginator, pages = paginate(request, pages, per_page=50)
return render(request, 'wagtailadmin/pages/index.html', {
'parent_page': parent_page,
'ordering': ordering,
'pagination_query_params': "ordering=%s" % ordering,
'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:
raise Http404
p = request.GET.get("p", 1)
page_class = content_type.model_class()
# 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()
paginator = Paginator(pages, 10)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
paginator, pages = paginate(request, pages, per_page=10)
return render(request, 'wagtailadmin/pages/content_type_use.html', {
'pages': pages,
@ -690,18 +675,8 @@ def search(request):
if form.is_valid():
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'])
# Pagination
paginator = Paginator(pages, 20)
try:
pages = paginator.page(p)
except PageNotAnInteger:
pages = paginator.page(1)
except EmptyPage:
pages = paginator.page(paginator.num_pages)
paginator, pages = paginate(request, pages)
else:
form = SearchForm()

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -1,13 +1,13 @@
import os
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.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
from django.core.urlresolvers import reverse, NoReverseMatch
from django.http import HttpResponse, JsonResponse
from wagtail.utils.pagination import paginate
from wagtail.wagtailcore.models import Site
from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin import messages
@ -44,16 +44,7 @@ def index(request):
else:
form = SearchForm(placeholder=_("Search images"))
# Pagination
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)
paginator, images = paginate(request, images)
# Create response
if request.is_ajax():
@ -253,16 +244,7 @@ def add(request):
def usage(request, image_id):
image = get_object_or_404(get_image_model(), id=image_id)
# Pagination
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)
paginator, used_by = paginate(request, image.get_usage())
return render(request, "wagtailimages/images/usage.html", {
'image': image,

Wyświetl plik

@ -1,14 +1,13 @@
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.views.decorators.vary import vary_on_headers
from django.core.urlresolvers import reverse
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin.edit_handlers import ObjectList
from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailadmin.utils import permission_required, any_permission_required
from wagtail.wagtailadmin import messages
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')
@vary_on_headers('X-Requested-With')
def index(request):
page = request.GET.get('p', 1)
query_string = request.GET.get('q', "")
ordering = request.GET.get('ordering', 'old_path')
@ -36,13 +34,7 @@ def index(request):
redirects = redirects.order_by(ordering)
# Pagination
paginator = Paginator(redirects, 20)
try:
redirects = paginator.page(page)
except PageNotAnInteger:
redirects = paginator.page(1)
except EmptyPage:
redirects = paginator.page(paginator.num_pages)
paginator, redirects = paginate(request, redirects)
# Render template
if request.is_ajax():

Wyświetl plik

@ -1,4 +1,4 @@
{% load i18n %}
{% load i18n wagtailadmin_tags %}
<table class="listing chooser">
<col width="50%"/>
<col width="50%"/>
@ -24,4 +24,4 @@
</tbody>
</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):
response = self.get({'q': "Hello"})
self.assertEqual(response.status_code, 200)
self.assertEqual(response.context['query_string'], "Hello")
def test_pagination(self):
pages = ['0', '1', '-1', '9999', 'Not a page']

Wyświetl plik

@ -1,6 +1,6 @@
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.forms import SearchForm
@ -22,28 +22,17 @@ def chooser(request, get_results=False):
else:
searchform = SearchForm()
# Pagination
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)
paginator, queries = paginate(request, queries, per_page=10)
# Render
if get_results:
return render(request, "wagtailsearch/queries/chooser/results.html", {
'queries': queries,
'query_string': query_string,
})
else:
return render_modal_workflow(request, 'wagtailsearch/queries/chooser/chooser.html', 'wagtailsearch/queries/chooser/chooser.js', {
'queries': queries,
'searchform': searchform,
'query_string': query_string,
})

Wyświetl plik

@ -1,11 +1,11 @@
import json
from django.core.paginator import Paginator, PageNotAnInteger, EmptyPage
from django.core.urlresolvers import reverse
from django.shortcuts import render, get_object_or_404
from django.utils.six import text_type
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.forms import SearchForm
from wagtail.wagtailsearch.index import class_is_indexed
@ -43,15 +43,7 @@ def choose(request, content_type_app_name, content_type_model_name):
})
# Pagination
p = request.GET.get("p", 1)
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)
paginator, paginated_items = paginate(request, items, per_page=25)
# If paginating or searching, render "results.html"
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.utils.translation import ugettext as _
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.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
})
# Pagination
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)
paginator, paginated_items = paginate(request, items)
# Template
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()
instance = get_object_or_404(model, id=id)
# Pagination
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)
paginator, used_by = paginate(request, instance.get_usage())
return render(request, "wagtailsnippets/snippets/usage.html", {
'instance': instance,

Wyświetl plik

@ -1,10 +1,10 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.models import Group
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm
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')
def index(request):
q = None
p = request.GET.get("p", 1)
is_searching = False
if 'q' in request.GET:
@ -42,14 +41,7 @@ def index(request):
else:
ordering = 'name'
paginator = Paginator(groups, 20)
try:
groups = paginator.page(p)
except PageNotAnInteger:
groups = paginator.page(1)
except EmptyPage:
groups = paginator.page(paginator.num_pages)
paginator, groups = paginate(request, groups)
if request.is_ajax():
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.contrib.auth import get_user_model
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.core.urlresolvers import reverse
from django.db.models import Q
from django.utils.translation import ugettext as _
from django.views.decorators.vary import vary_on_headers
from wagtail.utils.pagination import paginate
from wagtail.wagtailadmin import messages
from wagtail.wagtailadmin.forms import SearchForm
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')
def index(request):
q = None
p = request.GET.get("p", 1)
is_searching = False
if 'q' in request.GET:
@ -56,14 +55,7 @@ def index(request):
else:
ordering = 'name'
paginator = Paginator(users, 20)
try:
users = paginator.page(p)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
paginator, users = paginate(request, users)
if request.is_ajax():
return render(request, "wagtailusers/users/results.html", {