簡體   English   中英

如何在django中間件中重定向? 未定義全局名稱“視圖”

[英]How can I redirect in django middleware? global name 'view' is not defined

這里的Django新手,如果某個模型字段為空,則需要基本中間件方面的幫助以重定向到另一個視圖。

我正在創建一個協議條款頁面,如果用戶的Profile模型上的filed_terms字段為空,則用戶在注冊到平台后必須立即重定向到該頁面。

我為此使用中間件。 但是,我無法使它正常工作。 這是我的中間件類:

class TermsMiddleware(object):

    def process_request(self, request):

        if request.user.profile.filled_terms is None:
            return redirect(reverse(terms)) 

這給了我以下錯誤:

global name 'terms' is not defined

當手動導航到URL匹配器時,它也可以正常工作:

url(r'^terms/', 'my_app.views.terms')

我的views.py文件中有一個terms.html模板和一個terms視圖,在所有其他方面都可以正常工作。 我還已將其添加到設置中間件要求中,以確保加載。

我是否必須從視圖或URL調度程序中導入某些內容到我的中間件文件中? 如果是這樣,那會是什么? 我已經有一段時間了,找不到任何有用的東西。

reverse功能在正則表達式上使用url名稱代替。 因此,您需要在url配置上添加name 這是例子。

url(r'^terms/', 'my_app.views.terms', name='terms')

在您的views.py添加它

from django.core.urlresolvers import reverse

並且您需要修復反向功能。

return redirect(reverse('terms'))

Python將您的terms解釋為變量,並且您沒有需要命名為terms的變量,而需要將string放在相反的位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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