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

这对我来说似乎是正确的(注意 longitudelatitude 参数),因为登录后,我想被重定向到

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。

Django documentation.