4

下面是 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" 似乎没有区别,我的代码有什么问题?

4

2 回答 2

5

当您使用基于类的变体时,您通过.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(template_name='account/login.html')),
    path("logout/", LogoutView.as_view(), name="user_logout"),
    path("logoutt/", LogoutView.as_view(template_name='account/logout.html')),
]

否则参数将在 中结束self.kwargs,并且基于类的视图不会检查这些。

[Django-doc]上的LoginView文档提到了这一点以及您可以作为**initkwargs.

于 2018-09-04T08:04:47.310 回答
1

根据Willem Van Onsem 的建议,我发现关键问题是我混合了两种 urlpatterns 方式,如下所示:

  1. urls.py中的url()和正则表达式类型(我在django 1.10.1教程中学习)</p>

    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'),
    ]
    
  2. 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"),
    ]
    

很明显,有两个主要区别需要注意:

  1. 从django.conf.urls导入url,但是直接从django.urls导入路径,并且路径类型在django 2.0中是新的,路径看起来更简单
  2. 在 django 2.1 中,LoginView 和 LogoutView 设置传递给 as_view(),与较旧的表达式views.login, {"template_name"="account/login.html"}相比,也更简单
于 2018-09-04T10:43:53.050 回答