如何在Django的url模板标签的GET表单action中传递page分页参数
问题根因
当表单使用GET方法提交时,浏览器会自动将表单内部所有带name属性的输入控件的值拼接为查询字符串,直接覆盖action属性中自带的查询参数,所以你写在action里的page=1会被丢弃,不是url模板标签的用法问题。
最优解决方案
不需要修改action属性,直接在表单内添加一个隐藏的page输入项即可,修改后的表单代码如下:
<form method="get" action="{% url 'core:search' %}"> <div class="form-floating mb-3"> <input type="hidden" name="page" value="1"> <input type="search" class="form-control" id="floatingInput" name="q" value="{{ request.GET.q }}"> <label for="floatingInput">Type your search</label> </div> <button class="w-100 btn btn-lg btn-primary" type="submit">Search</button> </form>
修改后提交表单,生成的URL就会完全符合http://127.0.0.1:8000/search/?page=1&q=query的预期格式。
补充说明
- 你原有视图中的分页逻辑本身已经兼容
page参数缺失的场景,就算不做上面的修改,用户首次搜索也会默认返回第一页结果,只是URL中不会显式携带page=1参数 - 如果后续需要做分页跳转,只需要在分页按钮的链接中携带对应页码和当前搜索的
q参数即可
内容的提问来源于stack exchange,提问作者André Carvalho
相关产品推荐
相关产品推荐

