Django 1.5的行为混淆了模板名称位置的auth密码更改

时间:2013-07-18 18:22:37

标签: django django-templates

我是Django的新手,我对一个行为感到困惑,我正在摸不着头脑,理解为什么它没有像我期望的那样工作。

我正在自定义密码更改模板(password_change_form.html),并将其放在registration下的应用程序模板目录中。

我正在使用 django-registration 。在我的settings.py INSTALLED_APPS中,我有默认订单('django.contrib.auth'等...),我的应用和registration。管理员已启用。 我知道Django会按照INSTALLED_APPS变量中的顺序查找模板。

在我的项目urls.py中我有

urlpatterns = patterns('',
   url(r'', include('website.urls', namespace="website")),
   url(r'^admin/', include(admin.site.urls)),
   (r'^accounts/', include('registration.backends.default.urls')),
)
urlpatterns += staticfiles_urlpatterns()

在我的应用程序urls.py中我有

urlpatterns = patterns('',
   url(r'^$', views.home, name='home'),
   url(r'^accounts/profile/password/change/$', 
       'django.contrib.auth.views.password_change', 
       {'template_name': 'registration/password_change_form.html'}, 
       name='edit_password'),
)

我的混淆是,如果我将template_name设置为'registration/password_change_form.html',Django将显示默认的管理员表单以更改密码我的自定义模板。

我在我的应用模板下创建了一个名为auth的目录,并在此位置复制了我的模板。 现在,如果我将template_name更改为'auth/password_change_form.html',Django将显示我的模板!

我感到很困惑,因为Django没有关注我的指示registration位置使用我的模板,但如果它位于auth位置,我会感到困惑。

有人可以向我解释在Django 1.5的引擎下发生了什么,以及为什么它只会在我喜欢的目录中使用我的模板?!

1 个答案:

答案 0 :(得分:0)

是的,问题是您的第一条指令是默认指令 - 与已安装的应用程序顺序中的password_change_form.html相同的指令。如果您要检查template_name字段的默认值,那么它就是您正在设置它的内容。仅仅因为你自己设置了值而不是让它采用默认值 - 它仍然以相同的方式处理它。它按照instal_apps的顺序查找具有registration子目录的模板目录和password_change_form.html文件。所以无论如何,除非你在默认的django auth模板中给它一个不存在的名字 - 否则它将不会出现在你想要的地方(除非你把你的应用放在设置中的auth app之前)。现在,如果您想保持文件夹结构相同,只需更改文件名称并将正确的名称传递给template_name字段。