django模板中分页的实用程序
django-pagination-plus的Python项目详细描述
此模板标记库用于以分页方式显示分页链接。 Django观点。它公开一个模板标记{% paginationplus %},该标记将 注意重复页码。
用法
在设置中将paginationplus添加到INSTALLED_APPS中。
在分页视图模板的开头,使用以下命令加载 标签模块:
{% load paginationplus %}
然后,在您希望分页链接出现的位置,使用 跟随块标记。
{% paginationplus page_obj url_name url_arg1=... url_arg2=... %} ... {% endpaginationplus %}
传递给开始标记的第一个参数是 分页视图。其余参数与传递给的参数相同 内置的{% url %}标记,减去为 视图中的页码,例如泛型视图中的page。
块遍历Paginator对象中可用的页码 与作为第一个参数传递给 打开标签。
块的内容在每次迭代中呈现一次,在这个块中, 名为paginationplus的模板变量可用。
此模板变量公开四个属性:
- number 此迭代主题的页码
- url 包含当前迭代的页码的页的URL。
- is_filler 如果为true,则当前迭代不表示页码, 但它代表一个填充物,即页码序列中的一个孔。 更多信息见下文。
- is_current 如果为true,则当前迭代表示 当前显示在视图中。
单个标记用法
块标记的替代方法如下:
{% paginationplus page_obj url_name url_arg1=... url_arg2=... ... with 'template/name.html' %}
在标记中使用with表示迭代不会在 块,但在with后面的模板中。在这个模板中, 父模板的完整上下文可用,添加了 paginationplus变量。传递给标记的模板不必是字符串, 任何可用的模板变量都可以。
设置
默认情况下,paginationplus将支持显示第一个链接, 上一页、当前页、下一页和最后一页。例如,如果您有一个分页 查看99页,当前页是第30页,下面的顺序将 迭代:[1, None, 29, 30, 31, None, 99]。假设当前页 是第3页,序列将是[1, 2, 3, 4, None, 99]。
在上面的序列中,None值表示页码中的一个洞 对于这些洞,paginationplustemplate变量将 将其is_filler属性设置为True,将number和url 属性将设置为None,而is_current将设置为False。
要禁用此行为并遍历所有可用的页码,可以 将项目的PAGINATIONPLUS_CONTIGUOUS设置设置为True。 设置。
控制当前页之前和之后的页码 将被迭代,您可以设置PAGINATIONPLUS_MAX_DISTANCE选项。
例如,当PAGINATIONPLUS_MAX_DISTANCE设置为2时,以下 当页面数为99且当前 页面是30:^{TT33}$。当水流 页面是3,序列是[1, 2, 3, 4, 5, None, 99]。
示例
假设您在应用程序中使用一个公开列表的泛型ListView。 Item模型的对象的。让我们看看可能的urlconf:
# urls.py from django.conf.urls import patterns, url from django.views.generic import ListView from exampleapp import models urlpatterns = patterns('', # ... url(r'^items/(?:page/(?P<page>\d+)/)?$', ListView.as_view( model=models.Item, template_name='items.html', paginate_by=5 ), name='show_my_items'), )
然后,显示items.html模板中的项的部分可以 像这样:
{# items.html #} {# ... stuff ... #} <ul class="items"> {% for item in object_list %} <li>{{item}}</li> {# or something else to display the item #} {% endfor %} </ul> <ul class="pagination"> {% paginationplus page_obj show_my_items %} {% if paginationplus.is_filler %} <li>…</li> {% else %} <li class="{% if paginationplus.is_current %}current{% endif %}"> <a href="{{paginationplus.url}}">{{paginationplus.number}}</a> </li> {% endif %} {% endpaginationplus %} </ul> {# ... stuff ... #}
当用户访问此视图时,HTML将如下所示:
<ul class="items"> <li>Item 1</li> <li>Item 2</li> <li>Item 3</li> <li>Item 4</li> <li>Item 5</li> </ul> <ul class="pagination"> <li class="current"> <a href="/items/page/1/">1</a> </li> <li class=""> <a href="/items/page/2/">2</a> </li> <li>…</li> <li class=""> <a href="/items/page/20/">20</a> </li> </ul>
显示页面链接的另一种可能性是在 模板而不是<a>标记及其内容:
{{paginationplus}}
这将输出一个包含页码的锚定标记,其中包含 属性设置为pagE的URL。