2013-12-15 117 views
0

我正在使用django註冊應用與自定義模板和django管理員。出於某種原因,管理模板「password_change_form」正在被註冊應用程序中的自定義模板替換。我不知道我在這裏做錯了什麼。我想讓管理員使用自己的原始模板。我正在使用Django 1.5。任何幫助是極大的讚賞。Django admin password_change_form模板由django註冊應用模板覆蓋

以下是我對URL模式:

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', 

有什麼我失蹤?

+0

您是否在您的設置中定義了自定義TEMPLATE_LOADERS? – kanu

+0

這是我在TEMPLATE_LOADERS =( 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ) – user2966495

回答

4

好了,終於搞明白了。事實證明,Django註冊應用程序模板與管理註冊模板衝突。爲了解決這個問題,我將自定義django註冊模板從「註冊」改爲「myreg」的文件夾名稱(因爲管理註冊模板也在名爲「註冊」的文件夾下,這是我認爲令人困惑的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的註冊。

+0

非常好。可惜我們需要這樣做! –

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,並在瀏覽器中加載 '/測試/' URL。 這應該返回一個帶有TemplateDoesNotExist異常的ErrorPage。 向下滾動到模板加載器後驗模塊這將顯示您的模板文件夾檢查文件的順序。

+0

酷招,謝謝! –