如何在Django模板中将当前查询字符串添加到URL?

59 投票
7 回答
41427 浏览
提问于 2025-04-16 20:08

当我加载一个页面时,有一个链接 "sameLink",我想把它所在页面的 查询字符串 加到这个链接后面。

我有以下这个网址:

somedomain/reporting/article-by-month?variable1=2008

我该怎么做呢?

7 个回答

22

我发现@Michael的回答在你想更新一个已有的查询参数时并不太管用。

下面这个方法对我有效:

@register.simple_tag
def query_transform(request, **kwargs):
    updated = request.GET.copy()
    for k, v in kwargs.items():
        updated[k] = v

    return updated.urlencode()
24

如果你像下面这样注册一个模板标签:

@register.simple_tag
def query_transform(request, **kwargs):
    updated = request.GET.copy()
    updated.update(kwargs)
    return updated.urlencode()

那么你就可以在你的模板中修改查询字符串:

<a href="{% url 'view_name' %}?{% query_transform request a=5 b=6 %}">

这样做会保留查询字符串中已经存在的内容,只会更新你指定的那些键。

130

要获取请求中包含的查询参数,你需要引用一个包含这些参数的字典(也就是request.GET)。然后,你需要对这些参数进行编码,这样它们才能作为链接的一部分。request.GET.urlencode 会返回一个字符串,格式像这样:ds=&date_published__year=2008。你可以把这个字符串放到页面上的链接里,像这样:

<a href="sameLink/?{{ request.GET.urlencode }}">

撰写回答