You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django模板中编写For循环实现分页页码输出?

Django分页:输出1到总页数的页码列表

嘿,我懂你想要实现的效果——把1到总页数(这里是9)的页码逐个列出来对吧?你当前的代码行不通,是因为paginated_queryset.num_pages是一个整数,而Django模板里的for循环只能遍历可迭代对象(比如列表、range序列这类),直接循环整数肯定出不来结果的。

给你几个简单易懂的解决方案,适合新手操作:

方法一:在视图里生成页码范围(最推荐)

这是最直观的方式,在视图层处理好页码范围,再传给模板渲染:

视图代码:

from django.core.paginator import Paginator
from django.shortcuts import render
from .models import YourModel  # 替换成你的模型

def your_page_view(request):
    # 获取你的数据集
    queryset = YourModel.objects.all()
    # 初始化分页器,这里设置每页10条数据,可根据需求调整
    paginator = Paginator(queryset, per_page=10)
    # 获取当前请求的页码
    page_number = request.GET.get('page')
    # 获取分页后的对象
    paginated_queryset = paginator.get_page(page_number)
    
    # 生成1到总页数的整数范围(注意要+1,因为range是左闭右开的)
    page_range = range(1, paginator.num_pages + 1)
    
    # 把分页对象和页码范围一起传给模板
    return render(request, 'your_template.html', {
        'paginated_queryset': paginated_queryset,
        'page_range': page_range
    })

模板代码:

在模板里直接循环page_range就可以了:

{% for i in page_range %}
    {{ i }} 
{% endfor %}

这样就能输出你想要的1 2 3 4 5 6 7 8 9啦。

方法二:自定义模板过滤器(无需修改视图)

如果不想改动视图代码,可以写一个简单的模板过滤器,让模板能把整数转换成页码范围:

第一步:创建过滤器文件

在你的Django应用下新建templatetags目录(如果没有的话),然后在里面创建pagination_tags.py文件,内容如下:

from django import template

register = template.Library()

@register.filter
def to_page_range(num_pages):
    # 把整数转换成1到num_pages的范围
    return range(1, num_pages + 1)

第二步:在模板里使用过滤器

先加载过滤器,再用它处理num_pages:

{% load pagination_tags %}

{% for i in paginated_queryset.num_pages|to_page_range %}
    {{ i }} 
{% endfor %}

方法三:用模板内置标签绕一下(不推荐,可读性差)

如果临时想快速实现,也可以用模板的rjust标签生成对应长度的字符串,再通过循环计数器获取页码:

{% with total_pages=paginated_queryset.num_pages %}
    {% for _ in "x"|rjust:total_pages %}
        {{ forloop.counter }} 
    {% endfor %}
{% endwith %}

这种方法虽然能工作,但代码可读性差,新手不建议长期用。

作为Django新手,遇到这种“概念理解偏差”的问题很正常,多试几次就熟悉啦~

内容的提问来源于stack exchange,提问作者Shatish Desai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:02:35