簡而言之,我正在嘗試在我的一個視圖函式中測驗從 URL 引數捕獲的視圖名稱,以查看它是否有效。如果沒有,重定向到另一個頁面。
例如,拿這個網址...
www.site.com/users/?ref=view_name
那么在我看來
ref = request.GET.get('ref', None)
return redirect(ref) if ref else redirect('users')
當然,問題是,如果用戶更改 ref 引數,它將回傳 404。我希望能夠測驗是否ref=home是有效視圖并將其回傳,如果不是則重定向到另一個視圖。
我一直在搞亂 Django 的決心和逆轉,但我沒有得到我想要的結果。
我還嘗試以各種方式使用 try/finally 與 resolve 和 reverse 混合。是的,愚蠢的......我知道。
try:
if ref:
return redirect(resolve(ref))
finally:
return redirect('user')
我已經搜索了將近兩個小時,試圖資助一種簡潔的方式來做到這一點。
任何幫助,將不勝感激!
uj5u.com熱心網友回復:
問題是您正在傳遞一個resolve()需要 URL 路徑的視圖名稱。為了防止 404,您需要首先reverse()查看視圖名稱以獲取路徑。然后您可以使用該路徑resolve()來檢查該路徑是否存在。
uj5u.com熱心網友回復:
作業解決方案 在@Code-Apprentice 的指導下,這實際上非常簡單
一對夫婦首先進口
from django.urls.resolvers import NoReverseMatch
from django.urls import reverse
然后獲取 ref 引數并驗證是作為一個合法的視圖名稱,我做了以下
# get ref parameter
ref = request.GET.get('ref', None)
if ref:
try:
# redirect to ref view name if valid
return redirect(reverse(ref))
except NoReverseMatch as e:
print('No reverse match found')
# redirect to specific view if ref is invalid
return redirect('users')
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420707.html
標籤:
