【问题标题】:how to set index of page range in django templates如何在 django 模板中设置页面范围的索引
【发布时间】:2015-01-18 21:00:18
【问题描述】:

我有以下循环遍历我的分页对象:

{% for x in my_paginator.paginator.page_range %}
    <a href="?{% if query %}q={{ query }}&amp;{% endif %}page={{ x }}"><u>{{ x }}</u></a> 

{% endfor %}

我想切出比当前页面少 4 个索引和比当前页面大 4 个值。

我可以像这样获取当前页面:{{ my_paginator.number }}

如果页码为“61”并输出如下内容,我如何获得可以使用{{ x }} 打印的范围:

57 58 59 60 61 62 63 64 65

【问题讨论】:

    标签: python django for-loop django-templates django-template-filters


    【解决方案1】:

    您可以从视图中呈现最小和最大限制:

    paginator = Paginator(yourqueryset, request.GET.get('show'))
    if request.GET.get('page'):
        try:
          results = paginator.page(request.GET.get('page'))
        except PageNotAnInteger:
          results = paginator.page(1)
        except EmptyPage:
          results = paginator.page(paginator.num_pages)
    else:
        results = paginator.page(1)
    min = all.number - 4
    max = all.number + 4
    return render(request, 'template.html', {'results':results,'min':min,'max':max})
    

    然后在模板中:

    {% for page in results.paginator.page_range %}
       {% if page < max and page > min and page != results.number %}
          <a class="page">{{page}}</a>
       {% elif page == results.number %}
          <a>{{page}}</a>
       {% endif %}
    {% endfor %}
    

    然后你会得到类似的东西:

    57 58 59 60 61 62 63 64 65

    【讨论】:

    • 我知道这是几年前发布的,但我很好奇 all.number 的作用,例如:min = all.number - 4?我在 Google 上搜索并在内置函数中找到了“all”,但格式为:all(iterable),这与您在上面的编写方式不同。
    【解决方案2】:

    我最终这样做了:

    {% for x in my_paginator|relative_page_list:"5" %}
    
                    <a href="?{% if query %}q={{ query }}&amp;{% endif %}page={{ x }}"><u>{{ x }}</u></a> 
    
                        {% endfor %}
    

    模板标签实现如下所示:

    from django import template
    import string
    
    register = template.Library()
    
    @register.filter(name='relative_page_list')
    def relative_page_list(paginator, page_range):
        print 'arg: '+str(page_range)
        print 'page number: '+str(paginator.number)
        page_number = paginator.number
        last_page_number = paginator.paginator.page_range[-1]
        page_range = int(page_range)
        page_min = page_number - page_range
        page_max = page_number + page_range
    
        print 'min: '+str(page_min)
        print 'max: '+str(page_max)
    
        if page_min < 0:
            page_min = 0
    
        if page_max > last_page_number:
            page_max = last_page_number
    
        print page_min
        print page_max
        return paginator.paginator.page_range[page_min:page_max]
    

    这和谷歌的分页完全一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2013-06-06
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-06-17
      相关资源
      最近更新 更多