我正在尝试将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')
]
答案 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
在我的情况下有效。