我正在尝试按照“Django by Example”一书学习 Django,可能是由于版本冲突,我在尝试将 django.auth 与一些 URL 设置一起使用时遇到了这个问题 设置.py。 我现在感到非常沮丧,因为我什至不知道如何开始调试这个错误。任何帮助或建议将不胜感激 这是 settings.py 文件的相关部分
from django.core.urlresolvers import reverse_lazy
LOGIN_REDIRECT_URL = reverse_lazy('dashboard')
LOGIN_URL = reverse_lazy('login')
LOGOUT_URL = reverse_lazy('logout')
应用 View .py:
from django.shortcuts import render, redirect
from django.shortcuts import HttpResponse
from django.contrib.auth import authenticate, login, logout
from .forms import LoginForm
from django.contrib.auth.decorators import login_required
# Create your views here.
@login_required
def dashboard(request):
return render(request, 'account/dashboard.html', {'section': 'dashboard'})
网址.py
from django.conf.urls import url
from . import views
app_name = 'account'
urlpatterns = {
url(r'^$', views.dashboard, name='dashboard'),
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'),
}
主要 urls.py :
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^account/', include('account.urls')),
]
更新的 settings.py :
LOGIN_REDIRECT_URL = reverse_lazy('account:dashboard')
LOGIN_URL = reverse_lazy('account:login')
LOGOUT_URL = reverse_lazy('account:logout')
请您参考如下方法:
当您使用 app_name 设置一个 namespace 时,当您在其他地方 include() 时将使用该 urls.py。
因此没有名为 "login" 的 url,而是名为 "account:login",这是您必须传递给 reverse() 的名称。
LOGIN_REDIRECT_URL = reverse_lazy('account:dashboard')
LOGIN_URL = reverse_lazy('account:login')
LOGOUT_URL = reverse_lazy('account:logout')
相关文档:URL namespaces and included URLconfs
如果您使用 django-extensions (你应该这样做),你可以使用管理命令 show_urls 来获得在你的项目中注册的所有 url 路由的格式良好的列表。
