在设置登录和退出网址模式时,这本书(我相信使用Django 1.8)引用:
from django.conf.urls import url
from . import views
url(r'^login/$', 'django.contrib.auth.views.login', name='login'),
url(r'^logout/$', 'django.contrib.auth.views.logout', name='logout'),
url(r'^logout-then-login/$','django.contrib.auth.views.logout_then_login',name='logout_then_login'),
其中login,logout和logout_then_login在相同的应用程序模板/帐户目录中具有相应的.html文件。但是,在Django 1.11上,这些错误包括:
“TypeError:在include()”
的情况下,view必须是可调用的或list / tuple我认为是因为这个语法现在已经弃用了1.10及以上版本。尝试:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from . import views
url(r'^login/$', auth_views.LoginView.as_view(template_name='registration/login.html')),
url(r'^logout/$', auth_views.LogoutView.as_view(template_name='registration/logged_out.html')),
url(r'^logout-then-login/$', auth_views.LogoutThenLogin.as_view(template_name='logout_then_login.html')),
相反,但现在在我的主“base.html”代码中出现“无反向匹配”错误,位于:
<a href="{% url "login" %}">Log-in</a>
排队:
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<link href="{% static "css/base.css" %}" rel="stylesheet">
</head>
<body>
<div id="header">
<span class="logo">Bookmarks</span>
{% if request.user.is_authenticated %}
<ul class="menu">
<li {% if section == "dashboard" %}class="selected"{% endif %}><a href="{% url "dashboard" %}">My dashboard</a></li>
<li {% if section == "images" %}class="selected"{% endif %}><a href="#">Images</a></li>
<li {% if section == "people" %}class="selected"{% endif %}><a href="#">People</a></li>
</ul>
{% endif %}
<span class="user">
{% if request.user.is_authenticated %}
Hello {{ request.user.username }}, <a href="{% url "logout" %}">Logout</a>
{% else %}
<a href="{% url "login" %}">Log-in</a>
{% endif %}
</span>
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
之前在本书的早期版本的代码中没有出现过,该代码使用了指向的本地“login.html”视图:
url(r'^login/$', views.user_login, name='login'),
并使用完全相同的HTML代码。 FWIW,我的项目settings.py文件设置为:
from django.core.urlresolvers import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('dashboard') # redirect after login if no next parameter
LOGIN_URL = reverse_lazy('login') # redirect to login if login_required decorator set
LOGOUT_URL = reverse_lazy('logout') # redirect user to logout
为什么网址“登录”无法在此处反转?
答案 0 :(得分:0)
是的丹尼尔100%正确。新语法中有命名空间,vis:
url(r'^login/$', auth_views.LoginView.as_view(template_name='registration/login.html'), name='login'),
url(r'^logout/$', auth_views.LogoutView.as_view(template_name='registration/logged_out.html'), name='logout'),
有了它,一切正常。谢谢。我会将此发布回发行商勘误表。