问题 Django:登录后使用查询字符串*重定向到上一页*


我在用 django.contrib.auth 并希望在登录后重定向到上一页。我想要以下内容: Django:登录后重定向到上一页   重定向到的URL可以包含查询字符串。

目前我的模板中有以下链接:

<a href="{% url user_login %}?next={{ request.get_full_path }}">Login</a>

user_login 是我的登录视图的名称。

我想用 {{ request.get_full_path }} 代替 {{ request.path }} 获取包含查询字符串的当前路径,但这将在查询字符串中创建一个带有查询字符串的URL(例如, /login/?next=/my/original/path/?with=other&fun=query&string=parameters)哪些不起作用。

我也试过添加一个 redirect_to 我的登录视图的参数,并将带有查询字符串的url作为arument传递给 url 模板标签。然而,这给了我一个 NoReverseMatch 错误。


11432
2018-06-29 02:18


起源



答案:


如何转义获取参数然后在视图中取消引用它们?

HTML

<a href="{% url user_login %}?next={{ request.get_full_path|urlencode }}">Login</a>

登录视图

if successful_login:
    url_with_get = urllib2.unquote(request.GET.get('next'))
    return http.HttpResponseRedirect(url_with_get)

PS:我多次偶然发现你的博客寻找PIP帮助:)


11
2018-06-29 02:51



谢谢, urlencode 效果很好!我甚至不需要使用 urllib2.unquote 在视图中。 - saltycrane
+1。在建议get_full_path时,SO上的几个答案会错过urlencode部分。 - user


答案:


如何转义获取参数然后在视图中取消引用它们?

HTML

<a href="{% url user_login %}?next={{ request.get_full_path|urlencode }}">Login</a>

登录视图

if successful_login:
    url_with_get = urllib2.unquote(request.GET.get('next'))
    return http.HttpResponseRedirect(url_with_get)

PS:我多次偶然发现你的博客寻找PIP帮助:)


11
2018-06-29 02:51



谢谢, urlencode 效果很好!我甚至不需要使用 urllib2.unquote 在视图中。 - saltycrane
+1。在建议get_full_path时,SO上的几个答案会错过urlencode部分。 - user