当前位置: 首页 > 面试题库 >

如何用其他get变量对Django进行分页?

商振
2023-03-14
问题内容

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

html" target="_blank">解决办法是什么?有没有办法访问模板上的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具有多个具有相同名称的参数时,该方法不起作用。



 类似资料:
  • 我想用Java做一个程序来比较两个三角形。比较角度的顺序无关紧要,我知道我可以用语句来做,但有没有其他更有效的方法来比较3个角度和另外3个角度,因为三角形旋转并不重要,因为完全相同?(Java语言)

  • 以下是经典的实践中的一致性: 当线程A写入一个易失性变量,随后线程B读取相同的变量时,A在写入易失性变量之前可见的所有变量的值在读取易失性变量后变得对B可见。 我不确定我真的能理解这句话。例如,在这种情况下,所有变量的含义是什么?这是否意味着使用对使用非volatile变量也有副作用<在我看来,这句话有一些我无法理解的微妙含义<有什么帮助吗?

  • 我想用Django更新一个表-类似这样的原始SQL: 我的第一个结果是这样的——但这很恶心,不是吗? 有没有更优雅的方式?

  • 问题内容: 以下是经典文章Concurency in Practice: 当线程A写入易失性变量,随后线程B读取相同的变量时,在写入易失性变量之前A可见的所有变量的值,在读取易失性变量后B可见。 我不确定我是否真的能理解这一说法。例如,在这种情况下,所有变量的含义是什么?这是否意味着使用volatile还会对非易失性变量的使用产生副作用? 在我看来,该声明具有我无法理解的一些微妙含义。 有什么帮助

  • 这是可能的吗,以及如何使用这样的逻辑进行一行(或短)var赋值: 我试图做到: 但得到一个错误:“运算符|未在字符串上定义”。 所以我来自JS,并试图实现: 但要“走” 由于它是静态类型的Lang,我的意思是如果b == " "(空字符串)

  • 问题内容: 我有一个简单的文本输入字段,我必须在其中设置一个对象的默认值,并将其最终值保存在其他对象中。以下代码无法正常工作。 表单是DTO对象,客户端是数据库中的实体对象。 解决这种情况的正确方法是什么? 不工作是指-初始值为client.name =“ Foo”和form.clientName = null。我需要输入字段的显示值为“ Foo”,并在表单提交后将form.clientName值