为啥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注册中没有覆盖?的主要内容,如果未能解决你的问题,请参考以下文章

django xadmin中logout页面在chrome浏览器中点击关闭页面无效

Django环境搭建及创建_注册子应用

Django环境搭建及创建_注册子应用

Django环境搭建及创建_注册子应用

Django注释子查询的聚合

Django中用于创建注册页面的“没有这样的表”错误是啥?