python - 将 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')
]
解决方案
使用基于类的视图,.as_view()
您正在实例化视图的实例,因此需要将更改的属性传递给.as_view()
方法调用本身。
如果你想渲染视图模板,不要重定向到LOGOUT_REDIRECT_URL
- 设置next_page
为None
.
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'] = True
INSTALLED_APPS
admin
INSTALLED_APPS
django.contrib.admin
然而,这可能并不总是需要的。
为了更清楚起见,您可以为您的 django 项目和其中的应用程序使用一个全局templates
目录,并将其路径设置为settings.TEMPLATES[0]['DIRS']
.
或者,只要您已经提供了自定义模板的路径,请使用替代名称 /path 以避免与基本模板冲突。
推荐阅读
- javascript - 从 XMLHttpRequest 获取 POST 数据
- python - 使用 Python 进行数据清理
- java - Wildfly 10.1.0 Final Remoting 端点任务线程不断增长
- c# - 我如何测试数据交换格式以及我应该使用什么样的指标来评估它们?
- time-complexity - 旅行推销员中算法的时间复杂度?
- javascript - 根据角度计算边界框上的点
- html - 在一个类中选择一个类并使其有自己的行
- java - 使用 RxJava2 结合数据库和网络调用
- python - 如何通过在Python中将一个无理数除以另一个数字来获得一个非常长的十进制数字?
- c++ - tf.GraphDef.FromString 和 tf.GraphDef.ParseFromString 有什么区别?