[英]“global name 'forloop' is not defined ”in django view :ERROR
[英]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.