我正在使用Django的身份验证,在login.html模板中,以下语句生成错误:
{% url 'django.contrib.auth.views.login' %}
Run Code Online (Sandbox Code Playgroud)
/ login时的TemplateSyntaxError
渲染时捕获NoReverseMatch:反向找到''django.contrib.auth.views.login'',其参数'()'和关键字参数'{}'未找到.
这个网址在我的urls.py中定义:
(r'^login$', 'django.contrib.auth.views.login')
Run Code Online (Sandbox Code Playgroud)
我安装了auth系统:
INSTALLED_APPS = (
'django.contrib.auth',
...
)
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我正在使用Django 1.6.2(在Python 3.3上),并希望所有视图有效地将login_required装饰器应用于它们并重新使用实际的管理员登录表单.请注意,管理员应用程序也将与默认网址一起使用.我已经看过重定向到管理员登录,这是我想要避免的解决方案.
一个流行的路线似乎是使用自定义中间件,如使用下一个参数 DjangoSnippet 登录所需中间件所示.我已经改编了这个片段,并使用它如下:
project_name.middleware:
from django.contrib.auth.views import redirect_to_login
class LoginRequired:
def process_request(self, request):
if request.user.is_authenticated():
return
if request.path != '/admin/login/':
return redirect_to_login(request.path, '/admin/login/')
Run Code Online (Sandbox Code Playgroud)
settings.py:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'project_name.middleware.LoginRequired', # <----------
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
这几乎是有效的,除了?next=提供/admin/login的不是我预期的那样处理.给定http://localhost:8000/admin/login/?next=/(成功显示管理员登录表单并启用登录)的请求,在提交正确信息后,我得到404响应,The requested admin page does not exist.这可能意味着登录表单将提供的查询参数视为相对于某事物.
我该怎么做才能让它按预期工作?
注意:如果这是一个疯狂的追逐,我不会感到非常惊讶,所以如果这是不可能的,那么我愿意接受这种效果的答案(但如果它们包括引用/参考,那么它会很好,所以我可以填写一个我在这里理解的差距).