gpt4 book ai didi

django - 如何使用其他获取变量对 Django 进行分页?

转载 作者:行者123 更新时间:2023-11-28 19:33:23 25 4
gpt4 key购买 nike

我在 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

相反,我丢失了所有 get 变量并以

结尾
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's documentation 中描述的分页我的偏好是继续使用它。我使用的模板代码类似于这样:

{% 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 具有多个同名参数时不起作用。

您还需要从您的 View 中将 RequestContext 请求实例提供给您的模板。更多信息在这里:

http://lincolnloop.com/blog/2008/may/10/getting-requestcontext-your-templates/

关于django - 如何使用其他获取变量对 Django 进行分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com