将LoginView和LogoutView与自定义模板一起使用

时间:2020-01-11 08:48:03

标签: python django

我正在尝试将django.contrib.auth.LoginView和auth_views.LogoutView.as_view()与自定义模板一起使用,而不以任何方式干扰管理网站,无论应用程序在设置中的加载顺序如何.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')
]

登录视图会加载我的自定义模板,但注销不会,并且使用默认模板。无法弄清原因,终端中没有诊断程序...请帮助。谢谢! enter image description here enter image description here

3 个答案:

答案 0 :(得分:0)

那是因为Logoutview没有呈现模板,它正在重定向到另一个URL,因此您必须添加它。

观看次数

class LogOutView(TemplateView):
    template_name = "registration/logged_out.html"

URL

 path('logout-redirect/',LogoutView.as_view(), name='logout-redirect')

,然后在您的设置中。py

LOGOUT_REDIRECT_URL = 'logout-redirect/'

答案 1 :(得分:0)

对于带有.as_view()的基于类的视图,您将实例化视图的实例,因此更改后的属性必须为passed into .as_view() method call itself

如果要渲染视图模板,则不要重定向到LOGOUT_REDIRECT_URL-设置next_page to None

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

是的,如果您的模板是从每个应用程序的templates目录中加载的, django.template.loaders.app_directories.Loader(如果settings.TEMPLATES[0]['APP_DIRS'] = True也是如此)-Django将在INSTALLED_APPS的每个应用程序内加载/搜索模板,因此,为了覆盖admin模板,您将需要在INSTALLED_APPS中早于django.contrib.admin使用加载它们。

但是,可能并非总是如此。

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

或者,就您已经在提供自定义模板的路径而言,请使用备用名称/ path以避免与基本模板冲突。

答案 2 :(得分:0)

我曾经遇到过同样的问题,我将默认模板名称从'logged_out.html'更改为'logout.html',并将新模板名称作为参数传递给LogoutView。

enter code here

在我的情况下有效。