[英]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',
})
然后,在我的模板中,網站所有頁面上都存在的導航欄中,我具有以下登錄鏈接:
<li><a href="{% url 'login' %}?next={{ request.get_full_path }}">Log in</a></li>
當我從搜索結果頁面訪問登錄頁面時,我在地址欄中輸入的網址類似於:
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
。 換句話說,除第一個參數外的所有參數都已被剝離。 我無法弄清楚何時/何地/為什么要砍掉這些參數。 這是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的一部分,因此將其刪除。 為避免這種情況,請對整個網址進行編碼,以使其保持在一起:
<li><a href="{% url 'login' %}?next={{ request.get_full_path|urlencode }}">Log in</a></li>
&
字符得到編碼,因此瀏覽器不再拆分參數並將其發送到錯誤的url。
Django文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.