我的网站有一个页面列表,这些页面位于/记录下,仅可用于类型和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参数重定向?这种行为不可能吗?
答案 0 :(得分:2)
您可以使用HttpRequest.get_full_path()
方法和urlencode
模板过滤器来获取当前网址和查询字符串。
HttpRequest.get_full_path()
返回路径,以及附加的查询字符串(如果适用)。
href="{% url 'auth:login' %}?next={{request.get_full_path|urlencode}}
答案 1 :(得分:0)
您需要在网址中转义特殊字符,即'?','&'和' ='。
虽然有django.utils.encoding.escape_uri_path,但它并没有逃脱&符号(&),这是一个问题,因为它将被解释为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 }}