Django admin password_change_form模板被django-registration app templates覆盖

时间:2013-12-15 00:19:51

标签: django templates override admin registration

我正在使用带自定义模板的django-registration app和django admin。出于某种原因,管理模板“password_change_form”正由注册应用程序中的自定义模板替换。我不知道我在这里做错了什么。我希望管理员使用自己的原始模板。我正在使用Django 1.5。非常感谢任何帮助。

以下是我对urlpatterns的看法:

urlpatterns = patterns('',

 url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
 url(r'^admin/', include(admin.site.urls)),

(r'^accounts/', include('registration.backends.default.urls')),
(r'^accounts/profile', views.profile ),

我的TEMPLATE_DIRS和INSTALLED_APPS:

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
os.path.join(PROJECT_ROOT, 'templates/'),
os.path.join(PROJECT_ROOT, '../registration/templates/'),
)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'django.contrib.admindocs',
'registration',

有什么我想念的吗?

2 个答案:

答案 0 :(得分:4)

好的,所以终于想通了。原来django-registration app模板与管理员注册模板冲突。为了解决这个问题,我更改了我的自定义django注册模板从“注册”到“myreg”的文件夹名称(因为管理员注册模板也在一个名为“注册”的文件夹下,这是我认为令人困惑的django) 。然后在django-registration app的auth_urls.py文件中,我将模板名称从“registration / ...”更改为“myreg / ...”,并将模板名称参数添加到所有没有它的模式中。所以auth_urls.py会是这样的:

urlpatterns = patterns('',
                   url(r'^login/$',
                       auth_views.login,
                       {'template_name': 'myreg/login.html'},
                       name='auth_login'),
                   url(r'^logout/$',
                       auth_views.logout,
                       {'template_name': 'myreg/logout.html'},
                       name='auth_logout'),
                   url(r'^password/change/$',
                       auth_views.password_change,
                       {'template_name': 'myreg/password_change_form.html'},
                       name='auth_password_change'),
                   url(r'^password/change/done/$',
                       auth_views.password_change_done,
                       {'template_name': 'myreg/password_change_done.html'},
                       name='auth_password_change_done'),
                   url(r'^password/reset/$',
                       auth_views.password_reset,
                       {'template_name': 'myreg/password_reset_form.html'},
                       name='auth_password_reset'),
                   url(r'^password/reset/confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
                       auth_views.password_reset_confirm,
                       {'template_name': 'myreg/password_reset_confirm.html'},
                       name='auth_password_reset_confirm'),
                   url(r'^password/reset/complete/$',
                       auth_views.password_reset_complete,
                       {'template_name': 'myreg/password_reset_complete.html'},
                       name='auth_password_reset_complete'),
                   url(r'^password/reset/done/$',
                       auth_views.password_reset_done,
                       {'template_name': 'myreg/password_reset_done.html'},
                       name='auth_password_reset_done'),

这应解决问题,并允许Django使用单独的模板进行管理和django注册。

答案 1 :(得分:2)

如何轻松检查处理模板文件夹的顺序的技巧。

将您的urls.py修改为:

from django.views.generic import TemplateView
...

urlpatterns = patterns('',
    ...
    url(r'test/', TemplateView.as_view(template_name="i-dont-exist.html")),
    ...
)

确保您的settings.DEBUG和TEMPLATE_DEBUG设置为True并在浏览器中加载'/ test /'url。 这应该返回一个带有TemplateDoesNotExist异常的ErrorPage。 向下滚动到 Template-loader postmortem ,它会显示模板文件夹检查文件的顺序。

相关问题