kopia lustrzana https://github.com/wagtail/wagtail
Merge pull request #1802 from gasman/pagination-helper-redo
Refactor pagination into a helper - rebuild of #1496pull/1803/head
commit
a596fd82f1
|
@ -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", {
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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,
|
||||||
})
|
})
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
|
@ -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 %}
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 %}&{{ 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 %}&{{ 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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
|
@ -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):
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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 = []
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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():
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -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']
|
||||||
|
|
|
@ -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,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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':
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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", {
|
||||||
|
|
|
@ -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", {
|
||||||
|
|
Ładowanie…
Reference in New Issue