2016-01-02 39 views
2

我的Django的結構是:Django的TemplateView在錯誤的地方尋找

testing 
    contacts 
     __init__.py 
     templates 
      contacts 
       index.html 
     (additional modules) 
    testing 
     __init__.py 
     templates 
      testing 
       test.html 
     urls.py 
     (additional modules) 

裏面的主URL模塊,testing.urls的,我有如下URL配置:

url(r'^testing/$', TemplateView.as_view(template_name='testing/test.html')) 

的問題是,它一直在尋找contacts.templates.contactstest.html文件。與現有urlcon,調試頁說以下內容:

模板裝載機拋屍

Django tried loading these templates, in this order: 
Using loader django.template.loaders.filesystem.Loader: 
Using loader django.template.loaders.app_directories.Loader: 
/Library/Python/2.7/site-packages/django/contrib/admin/templates/testing/test.html (File does not exist) 
/Library/Python/2.7/site-packages/django/contrib/auth/templates/testing/test.html (File does not exist) 
/Users/*/Developer/django/testing/contacts/templates/testing/test.html (File does not exist) 

它總是默認爲..................由於某種原因,........ ^^^^^^^^^^文件夾contacts。 TemplateView或template_name還有其他一些參數可以控制嗎?任何幫助感謝!


更新 - 裏面settings.py

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
     }, 
    }, 
] 
+0

如何在settings.py中定義模板目錄? – Mirac7

+0

@ Mirac7更新了'settings.py'部分的問題 – inthenameofmusik

回答

4

testing/testing目錄沒有被Django的搜索。最簡單的解決方法是將其添加到DIRS設置:

'DIRS': [os.path.join(BASE_DIR, 'testing', 'templates')], 

另一種選擇是增加testingINSTALLED_APPS設置。然後Django會找到你的模板,因爲你有APP_DIRS=True。但我不會推薦這個,因爲在你的情況下,testing/testing是包含settings.py和根URL配置的特殊目錄。

+0

感謝您的回答,以及針對'INSTALLED_APPS'中放置'testing'應用程序的額外建議。你建議保持'root'('testing')應用程序不在那裏,因爲它只能用作正確應用程序的一種路由器類型? – inthenameofmusik

+1

包含'settings.py'和root url conf的目錄通常不包含在'INSTALLED_APPS'中。正如你所說,根URL通常包括來自其他應用程序的URL。我曾經見過一些人將它包含在'INSTALLED_APPS'中,所以我並不是說你絕對不應該這樣做。 – Alasdair

3

通過指定"APP_DIRS": True,您告訴django搜索每個安裝的應用程序中的模板文件。請檢查settings.py您的所有應用是否包含在INSTALLED_APPS之內。如果是的話,你可以嘗試強制django在你的應用中尋找模板。

TEMPLATES = [ 
    { 
     'DIRS': [os.path.join(BASE_DIR, 'testing', 'templates')], 
     .... 
    }, 
]