为啥logged_out.html在django注册中没有覆盖?
Posted
技术标签:
【中文标题】为啥logged_out.html在django注册中没有覆盖?【英文标题】:why is logged_out.html not overriding in django registration?为什么logged_out.html在django注册中没有覆盖? 【发布时间】:2016-05-11 05:40:59 【问题描述】:我正在使用内置的 django 登录和注销。在我的 Project/urls.py 中,我添加了用于登录和注销的 url。
from django.conf.urls import include, url
from account import views
from django.contrib.auth import views as auth_views
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$',views.index,name='Index'),
url(r'^accounts/login/$',auth_views.login,name='login'),
url(r'^accounts/logout/$',auth_views.logout,name='logout'),
url(r'^accounts/register/$',views.register,name='register'),
url(r'^accounts/profile/$',views.profile,name='profile'),
]
我的帐户应用程序文件夹中有模板文件夹。我有这样的目录结构
account
-templates
-registration
-login.html
-logged_out.html
-register.html
-rest_html_files
-rest files
我读过 django 文档,其中说 login() 默认模板是registration/login.html,它在我的项目中运行良好,如果没有提供参数,logout() 默认模板是registration/logged_out.html,但无论何时单击它注销按钮(具有 href=% url 'logout' % )它重定向到管理员注销页面而不是我的自定义注销页面。 可能有什么问题??
【问题讨论】:
你能发布视图的代码吗? view 在这种情况下不需要做任何事情,因为我正在使用 django auth。 【参考方案1】:django.contrib.admin
应用也有一个registration/logged_out.html
模板。
为确保使用您的“帐户”应用中的模板,请确保它在您的INSTALLED_APPS
设置中高于“django.contrib.admin”。
INSTALLED_APPS = (
'account',
...
'django.contrib.admin',
...
)
应用模板加载器会遍历INSTALLED_APPS
中的应用以及每个应用的模板目录,直到找到匹配项。因此,如果 admin 在您的应用之上,那么 Django 将使用来自 admin 而不是来自您的应用的模板。
【讨论】:
感谢@Alasdair 的回答,但在问这个问题之前我已经花了好几个小时了,而且我的应用程序在已安装的应用程序中。对于您的评论,我已经知道 next_page 属性我只想问的是为什么,如果登录被覆盖,那么为什么注销的工作方式不一样。 将您的应用放在INSTALLED_APPS
中是不够的。它需要高于“django.contrib.admin”。当前正在使用您的登录模板,因为管理应用没有 registration/login.html
模板。
谢谢!!!那成功了。对不起,我之前没理解,对不起,他们不让我投票给你的答案..;-)
很高兴它成功了。不用担心投票,一旦您获得更多声誉,您就可以对答案进行投票。
这是一个巨大的陷阱!对于像我这样的 django 新手。我头疼了好几个小时,然后才意识到我的自定义应用程序排在最后。想知道 django 文档在哪里可以最好地警告这种行为【参考方案2】:
您可以像这样设置将其重定向到下一页:
url(r'^accounts/logout/$',auth_views.logout, name='logout',
'next_page': '/path_to_your_page/')
根据:https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.views.logout
或者
<a href="% url 'logout' %?next=/path_to_the_page"> Logout</a>
【讨论】:
感谢库什特里姆!但我已经想通了。我要问的是什么可能导致此方法无法正常工作。以上是关于为啥logged_out.html在django注册中没有覆盖?的主要内容,如果未能解决你的问题,请参考以下文章