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