【问题标题】:Django admin password_change_form template overridden by django-registration app templatesDjango admin password_change_form 模板被 django-registration 应用程序模板覆盖
【发布时间】:2023-04-03 13:23:01
【问题描述】:

我正在使用带有自定义模板的 django-registration 应用程序和 django 管理员。出于某种原因,管理模板“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',

)

我有什么遗漏吗?

【问题讨论】:

  • 您的设置中是否定义了自定义 TEMPLATE_LOADERS?
  • 这就是我在 TEMPLATE_LOADERS = ('django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', )

标签: django templates overriding admin registration


【解决方案1】:

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

将你的 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/”网址。 这应该返回带有 TemplateDoesNotExist 异常的 ErrorPage。 向下滚动到 Template-loader postmortem,这会向您显示检查模板文件夹中文件的顺序。

【讨论】:

    【解决方案2】:

    好吧,终于明白了。原来 django-registration 应用程序模板与管理员注册模板冲突。为了解决这个问题,我将自定义 django-registration 模板所在的文件夹名称从“registration”更改为“myreg”(因为管理员注册模板也在名为“registration”的文件夹下,我认为这让 django 感到困惑) .然后在 django-registration 应用程序的 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-registration 使用单独的模板。

    【讨论】:

    • 非常好。可惜我们需要这样做!
    猜你喜欢
    • 2015-03-16
    • 2017-08-23
    • 2011-06-21
    • 2017-01-10
    • 2011-04-27
    • 2020-02-18
    • 2017-07-06
    • 2015-04-15
    • 2013-06-05
    相关资源
    最近更新 更多