template_name 在 LogoutView 中无法在 django2.1 python3.7 上运行
template_name in LogoutView not working on django2.1 python3.7
以下是 django.contrib.auth.views.LogoutViews、
中的默认设置
template_name = 'registration/logged_out.html'
我这样配置我的应用程序的 urls.py:
from django.urls import path
from . import views
from django.conf import settings
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'account'
urlpatterns = [
#path("login/", views.user_login, name="user_login"),
path("login/", LoginView.as_view(), name="user_login"),
path("nlogin/", LoginView.as_view(), {"template_name":"account/login.html"}),
path("logout/", LogoutView.as_view(), name="user_logout"),
path("logoutt/", LogoutView.as_view(), {"template_name":"account/logout.html"}),
]
"template_name":"account/login.html" 正常工作,但 "template_name":"account/logout.html" 似乎没有区别,我的代码有什么问题?
当您使用基于 class 的 变体时,您通过 .as_view
将设置传递给视图(所谓的 **initkwargs
) 方法:
from django.urls import path
from . import views
from django.conf import settings
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'account'
urlpatterns = [
#path("login/", views.user_login, name="user_login"),
path("login/", LoginView.as_view(), name="user_login"),
path("nlogin/", LoginView.as_view<b>(template_name='account/login.html')</b>),
path("logout/", LogoutView.as_view(), name="user_logout"),
path("logoutt/", LogoutView.as_view<b>(template_name='account/logout.html')</b>),
]
否则参数将在 self.kwargs
中结束,基于 class 的视图不会检查这些。
documentation on the LoginView
[Django-doc] 提到了这一点以及您可以作为 **initkwargs
传递的参数列表。
根据 ,我发现关键问题是我混淆了两种 url 模式,如下所示:
url()和urls.py中的正则表达式类型(我在django 1.10.1教程中学习)
from django.conf.urls import url
from django.contrib.auth import views
urlpatterns = [
url(r"^login/$", views.login, {"template_name"="account/login.html"}, name='user_login'),
]
path() 输入 urls.py(django 2.1 文档)
from django.urls import path
from django.contrib.auth.views import LoginView
urlpatterns = [
path("login/", LoginView.as_view(template_name="account/login.html"),name="user_login"),
]
很明显,有两个主要区别需要注意:
- url import from django.conf.urls,但是直接从django.urls import 路径,路径类型是django 2.0 新增的,path 看起来更简单
- 在 django 2.1 中,LoginView 和 LogoutView 设置传递 as_view(),与旧表达式 views.login、{"template_name"="account/login.html" 相比}, 也更简单
以下是 django.contrib.auth.views.LogoutViews、
中的默认设置template_name = 'registration/logged_out.html'
我这样配置我的应用程序的 urls.py:
from django.urls import path
from . import views
from django.conf import settings
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'account'
urlpatterns = [
#path("login/", views.user_login, name="user_login"),
path("login/", LoginView.as_view(), name="user_login"),
path("nlogin/", LoginView.as_view(), {"template_name":"account/login.html"}),
path("logout/", LogoutView.as_view(), name="user_logout"),
path("logoutt/", LogoutView.as_view(), {"template_name":"account/logout.html"}),
]
"template_name":"account/login.html" 正常工作,但 "template_name":"account/logout.html" 似乎没有区别,我的代码有什么问题?
当您使用基于 class 的 变体时,您通过 .as_view
将设置传递给视图(所谓的 **initkwargs
) 方法:
from django.urls import path
from . import views
from django.conf import settings
from django.contrib.auth.views import LoginView, LogoutView
app_name = 'account'
urlpatterns = [
#path("login/", views.user_login, name="user_login"),
path("login/", LoginView.as_view(), name="user_login"),
path("nlogin/", LoginView.as_view<b>(template_name='account/login.html')</b>),
path("logout/", LogoutView.as_view(), name="user_logout"),
path("logoutt/", LogoutView.as_view<b>(template_name='account/logout.html')</b>),
]
否则参数将在 self.kwargs
中结束,基于 class 的视图不会检查这些。
documentation on the LoginView
[Django-doc] 提到了这一点以及您可以作为 **initkwargs
传递的参数列表。
根据
url()和urls.py中的正则表达式类型(我在django 1.10.1教程中学习)
from django.conf.urls import url from django.contrib.auth import views urlpatterns = [ url(r"^login/$", views.login, {"template_name"="account/login.html"}, name='user_login'), ]
path() 输入 urls.py(django 2.1 文档)
from django.urls import path from django.contrib.auth.views import LoginView urlpatterns = [ path("login/", LoginView.as_view(template_name="account/login.html"),name="user_login"), ]
很明显,有两个主要区别需要注意:
- url import from django.conf.urls,但是直接从django.urls import 路径,路径类型是django 2.0 新增的,path 看起来更简单
- 在 django 2.1 中,LoginView 和 LogoutView 设置传递 as_view(),与旧表达式 views.login、{"template_name"="account/login.html" 相比}, 也更简单