簡體   English   中英

Django登錄重定向是否會刪除我的url參數?

[英]Is Django login redirect stripping my url parameters?

在我的URLconf中,我具有以下URL(其中logindjango.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

這對我來說似乎正確(請注意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 換句話說,除第一個參數外的所有參數都已被剝離。 我無法弄清楚何時/何地/為什么要砍掉這些參數。 這是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM