如何在Django GET表单中使用{% querystring %}模板标签?
用Django 5.1的
{% querystring %}处理GET表单的查询参数保留问题 当然可以用{% querystring %}解决这个问题,比之前手动加隐藏字段的方案简洁太多。
你只需要在表单里用{% querystring %}生成当前页面除query外的所有查询参数,转成隐藏字段,提交表单时这些参数就会被一并带上。
修改后的表单代码如下:
<form method="GET"> {# 保留除query外的所有现有查询参数,生成隐藏字段 #} {% querystring without "query" as preserved_params %} {% for key, value in preserved_params %} <input type="hidden" name="{{ key }}" value="{{ value }}"> {% endfor %} <input name="query" value="{{ request.GET.query }}"> <button type="submit">Search</button> </form>
原理很直观:
{% querystring without "query" %}会读取当前URL的查询参数,去掉query字段后返回处理好的查询字符串对象- 循环该对象,把每个键值对转成隐藏输入框,提交表单时这些参数就会和
query字段一起被提交 - 最终就能得到包含
paginate_by和query的完整查询字符串:localhost:8000/?paginate_by=50&query=abc
如果之后要添加其他需要保留的参数,只需调整without后的字段列表即可,比如without "query" "other_field",非常灵活。
内容的提问来源于stack exchange,提问作者Matija Sirk
相关产品推荐
相关产品推荐

