Django接下来是查询参数

时间:2016-07-03 06:31:51

标签: python django redirect

我的网站有一个页面列表,这些页面位于/记录下,仅可用于类型和ID的查询参数。像这样:

  

/记录类型=诗&安培;?ID = 175

我正在使用django下一个重定向从登录页面转到上一页。我最初使用href="{% url 'auth:login' %}?next={{ request.path }}"来重定向,但它没有采用查询参数(即type和id)。这需要用户

  

/登录/?下一= /记录

然后我使用了href="'{% url 'auth:login' %}?next={{ request.path }}'+window.location.search"。但是,这不起作用。这需要用户

  

/登录/下一= /记录类型=诗&安培;?ID = 175

但最终重定向到

  

/记录

如何使用next和query参数重定向?这种行为不可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用HttpRequest.get_full_path() 方法和urlencode模板过滤器来获取当前网址和查询字符串。

  

HttpRequest.get_full_path()
  返回路径,以及附加的查询字符串(如果适用)。

href="{% url 'auth:login' %}?next={{request.get_full_path|urlencode}}

答案 1 :(得分:0)

您需要在网址中转义特殊字符,即&#39;?&#39;,&#39;&amp;&#39;和&#39; =&#39;。 虽然有django.utils.encoding.escape_uri_path,但它并没有逃脱&符号(&amp;),这是一个问题,因为它将被解释为next参数的结尾和另一个的开头。< / p>

相反,您可以使用urllib.parse.quote

from urllib.parse import quote
current_url_escaped = quote(request.get_full_path())

并在模板中:

href="{% url 'auth:login' %}?next={{ current_url_escaped }}