Django 登录重定向是否剥离了我的 url 参数?
Is Django login redirect stripping my url parameters?
在我的 URLconf 中,我有以下 url(其中 login
是来自 django.contrib.auth.views
的内置登录视图功能):
url(r'^login/', login, name='login', kwargs={
'template_name': 'topspots/login.html',
'redirect_field_name': 'next',
})
然后在我的模板中,在网站所有页面上的导航栏中,我有以下登录名 link:
<li><a href="{% url 'login' %}?next={{ request.get_full_path }}">Log in</a></li>
当我从搜索结果页面访问登录页面时,我在地址栏中得到的 url 类似于:
http://localhost:8000/login/?next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999
这对我来说似乎是正确的(注意 longitude
和 latitude
参数),因为登录后,我想被重定向到
http://localhost:8000/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999
即 next
路径。但是,从登录视图来看,{{ next }}
的值最终变为 /spots/search/?search_query=South Oak Park, KCMO, MO, United States
。换句话说,除了第一个参数之外的所有参数都被剥离了。我无法确定 when/where/why 这些参数被砍掉了。这是 Django 正在做的事情,还是源于我的错误?如果是 Django,我肯定有充分的理由,但如果只是我做错了什么,我想修复它。有什么建议么?谢谢!
您生成的 url 最终会像这样被解析:
next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States
searchtype=default
latitude=38.97600750000001
longitude=-94.58623399999999
附加参数不再是 next
url 的一部分,因此它们将被删除。为避免这种情况,请对整个 url 进行编码,使其保持在一起:
<li><a href="{% url 'login' %}?next={{ request.get_full_path|urlencode }}">Log in</a></li>
&
字符被编码,因此浏览器不再拆分参数并将它们发送到错误的 url。
在我的 URLconf 中,我有以下 url(其中 login
是来自 django.contrib.auth.views
的内置登录视图功能):
url(r'^login/', login, name='login', kwargs={
'template_name': 'topspots/login.html',
'redirect_field_name': 'next',
})
然后在我的模板中,在网站所有页面上的导航栏中,我有以下登录名 link:
<li><a href="{% url 'login' %}?next={{ request.get_full_path }}">Log in</a></li>
当我从搜索结果页面访问登录页面时,我在地址栏中得到的 url 类似于:
http://localhost:8000/login/?next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999
这对我来说似乎是正确的(注意 longitude
和 latitude
参数),因为登录后,我想被重定向到
http://localhost:8000/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States&searchtype=default&latitude=38.97600750000001&longitude=-94.58623399999999
即 next
路径。但是,从登录视图来看,{{ next }}
的值最终变为 /spots/search/?search_query=South Oak Park, KCMO, MO, United States
。换句话说,除了第一个参数之外的所有参数都被剥离了。我无法确定 when/where/why 这些参数被砍掉了。这是 Django 正在做的事情,还是源于我的错误?如果是 Django,我肯定有充分的理由,但如果只是我做错了什么,我想修复它。有什么建议么?谢谢!
您生成的 url 最终会像这样被解析:
next=/spots/search/?search_query=South+Oak+Park%2C+KCMO%2C+MO%2C+United+States
searchtype=default
latitude=38.97600750000001
longitude=-94.58623399999999
附加参数不再是 next
url 的一部分,因此它们将被删除。为避免这种情况,请对整个 url 进行编码,使其保持在一起:
<li><a href="{% url 'login' %}?next={{ request.get_full_path|urlencode }}">Log in</a></li>
&
字符被编码,因此浏览器不再拆分参数并将它们发送到错误的 url。