首页 > 解决方案 > 将 LoginView 和 LogoutView 与自定义模板一起使用

问题描述

我正在尝试将 django.contrib.auth.LoginView 和 auth_views.LogoutView.as_view() 与自定义模板一起使用,而不以任何方式干扰管理站点,无论应用程序在 settings.py 文件中加载的顺序如何. 至今没有成功。

这是我的 urls.py:

from django.urls import path, include 
from django.contrib.auth import views as auth_views
from . import views 

urlpatterns = [
    # ...
    path('login/', auth_views.LoginView.as_view(), {'template_name': 'registration/login.html'}, name = 'login'),
    path('logout/', auth_views.LogoutView.as_view(), {'template_name': 'registration/logged_out.html'}, name = 'logout')
]

登录视图会加载我的自定义模板,但注销不会并使用默认模板。无法弄清楚为什么,终端中没有出现诊断...请帮助。谢谢! 在此处输入图像描述 在此处输入图像描述

标签: pythondjango

解决方案


使用基于类的视图,.as_view()您正在实例化视图的实例,因此需要将更改的属性传递给.as_view()方法调用本身

如果你想渲染视图模板,不要重定向到LOGOUT_REDIRECT_URL- 设置next_pageNone.

path('logout/',
    auth_views.LogoutView.as_view(
        template_name='registration/logged_out.html',
        next_page=None
    ),
    name = 'logout'
)

是的,如果您的模板是使用django.template.loaders.app_directories.Loadertemplates从每个应用程序的目录 中加载的(如果 也是这种情况) - Django 将在每个应用程序中加载/搜索模板,以便覆盖模板您将需要早于.settings.TEMPLATES[0]['APP_DIRS'] = TrueINSTALLED_APPSadminINSTALLED_APPSdjango.contrib.admin

然而,这可能并不总是需要的。

为了更清楚起见,您可以为您的 django 项目和其中的应用程序使用一个全局templates目录,并将其路径设置为settings.TEMPLATES[0]['DIRS'].

或者,只要您已经提供了自定义模板的路径,请使用替代名称 /path 以避免与基本模板冲突。


推荐阅读