我是新來的StackOverflow和Django的扭轉auth.views.login ...Django的新手:嘗試在login_required()裝飾
簡要的問題(參見下面的「長期問題」),下面的代碼在安裝MyApps/views.py失敗:
from django.core.urlresolvers import reverse
...
@login_required(login_url=reverse('django.contrib.auth.views.login'))
def my_view(request):
pass
錯誤是:
ViewDoesNotExist at/
tried my-view2 in module myproject.myapps.views. Error was: 'module' object has no attribute 'my-view2'
'我的-視圖2' 在安裝MyApps/views.py定義我的視圖之後(且在myproject的被引用/ urls.py)
我想這裏有雞和雞蛋這樣的東西,但我無法弄清楚我錯在哪裏。 我嘗試建立LOGIN_URL settings.py中一樣具有相同的錯誤:
from django.core.urlresolvers import reverse
...
LOGIN_URL=reverse('django.contrib.auth.views.login')
現在長的問題(什麼情況下,我爲什麼要這麼做):
Django的1.3.1我的工作得到了以下觀點,與auth.decorator保護:
@login_required
def my_view(request)
pass
這個裝飾默認重定向到/帳號/登錄(它工作和對我很好)。
使用DEVELOPPEMENT服務器整個URL是相對於本地主機:/
在生產服務器(使用WSGI),整個URL相對於我的服務器:/ PATH1/ 這是由於apache的構造比如說: WSGIScriptAlias/path1 /var/www/path/to/script.wsgi
這對我來說很好。
在myproject/urls.py中定義的所有URL都是自動相對於這個新路徑,所以感謝django,我的所有網站都在處理這個新的「html根目錄」。
但我的受保護視圖仍然重定向到我的服務器:/帳號/登錄/代替鄰我的服務器:/路徑1 /帳號/密碼
到目前爲止,我讓它工作使用settings.py
LOGIN_URL=/path1/accounts/login/
或使用LOGIN_URL參數的「login_required」裝飾:在這兩個阿帕奇
@login_required(login_url="/path1/accounts/login/")
不過,我想,這個登錄視圖相對於整個網站的路徑,而無需配置「路徑1」和django/settings.py
我不覺得在settings.py中使用reverse是正確的做 也不是在視圖裝飾器中使用它。但到目前爲止,我不知道如何處理...
你可以發佈你的urls.py嗎? – 2012-01-09 15:18:00
你真的有一個定義爲'my-view2'的視圖嗎?這不是一個有效的Python名稱,''是一個運算符。如果你這樣做,你應該把它重命名爲'my_view2'。 – brutasse 2012-01-09 16:15:23