我是新来的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