我在Django中使用分页时遇到问题。以下面的URL为例:
http://127.0.0.1:8000/users/?sort=first_name
在此页面上,我按用户的名字对用户列表进行排序。如果没有排序GET变量,则默认按ID排序。
现在,如果我单击下一个链接,则需要以下URL:
http://127.0.0.1:8000/users/?sort=first_name&page=2
相反,我失去了所有的获取变量并最终得到
http://127.0.0.1:8000/users/?page=2
这是一个问题,因为第二页是按ID而不是first_name排序的。
如果我使用request.get_full_path,我最终将得到一个丑陋的URL:
http://127.0.0.1:8000/users/?sort=first_name&page=2&page=3&page=4
解决办法是什么?有没有办法访问模板上的GET变量并替换页面的值?
我正在按照Django文档中的说明使用分页,我的首选是继续使用它。我使用的模板代码与此类似:
{% if contacts.has_next %} <a href="?page={{ contacts.next_page_number }}">next</a> {% endif %}
我认为建议的自定义标签太复杂了,这就是我在模板中所做的:
<a href="?{% url_replace request 'page' paginator.next_page_number %}">
和标签功能:
@register.simple_tag def url_replace(request, field, value): dict_ = request.GET.copy() dict_[field] = value return dict_.urlencode()
如果url_param尚未在url中,则将其添加值。如果已经存在,则将其替换为新值。这是适合我的简单解决方案,但是当url具有多个具有相同名称的参数时,该方法不起作用。