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

Django ListView分页时如何保留URL中的GET筛选参数?

解决方法

参数丢失的原因是当前分页链接仅拼接了page参数,没有携带当前请求的其他筛选参数,只需修改模板中的分页链接生成逻辑,自动带上除page外的所有现有GET参数即可。


具体修改步骤

  1. 先确认模板上下文已注入request对象:Django 1.10+默认已开启django.template.context_processors.request上下文处理器,无需额外配置。
  2. 修改product_all.html中的分页部分代码,把所有分页链接的href属性替换为带现有参数的格式:
<nav aria-label="page navigation" class="d-flex justify-content-center mb-5 mt-3">
  <ul class="pagination">
    {% if page_obj.has_previous %}
    <li class="page-item"><a href="?{% for k,v in request.GET.items %}{% if k != 'page' %}{{ k }}={{ v }}&{% endif %}{% endfor %}page={{ page_obj.previous_page_number }}" aria-label="Previous" class="page-link"><span aria-hidden="true">Prev</span><span class="sr-only">Previous</span></a></li>
    {% endif %}

    {% for i in paginator.page_range %}
      {% if page_obj.number == i %}
    <li class="page-item active"><a href="#" class="page-link">{{ i }}</a></li>
      {% else %}
    <li class="page-item"><a href="?{% for k,v in request.GET.items %}{% if k != 'page' %}{{ k }}={{ v }}&{% endif %}{% endfor %}page={{ i }}" class="page-link">{{ i }}</a></li>
      {% endif %}
    {% endfor %}

    {% if page_obj.has_next %}
    <li class="page-item"><a href="?{% for k,v in request.GET.items %}{% if k != 'page' %}{{ k }}={{ v }}&{% endif %}{% endfor %}page={{ page_obj.next_page_number }}" aria-label="Next" class="page-link"><span aria-hidden="true">Next</span><span class="sr-only">Next     </span></a></li>
    {% endif %}
  </ul>
</nav>

优化方案(可选)

如果觉得模板里循环拼接参数太冗余,可以自定义模板过滤器统一处理参数拼接,方便多处复用:

  1. 在你的应用目录下新建templatetags文件夹,添加__init__.py空文件和query_utils.py,内容如下:
from django import template

register = template.Library()

@register.simple_tag
def get_merged_query_params(request, exclude_params=None):
    exclude_list = exclude_params.split(',') if exclude_params else []
    params = request.GET.copy()
    for key in exclude_list:
        params.pop(key, None)
    return params.urlencode()
  1. 在模板顶部加载自定义标签:{% load query_utils %}
  2. 分页链接简化为如下格式即可:
?{% get_merged_query_params request exclude_params='page' %}&page={{ 对应页码 }}

修改完成后访问带筛选参数的页面,点击分页按钮时URL会自动保留所有现有筛选参数,格式符合?collection=Drawing&page=2的要求,筛选结果不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:36:03