2010-10-31 219 views
1

我在Windows XP SP3上運行Python 2.6.1和Django 1.2.1。我使用JetBrains PyCharm 1.0來創建和部署我的Django應用程序。Django無法找到我的模板

我對Python相對缺乏經驗,我開始通過跟隨「編寫您的第一個Django應用程序」從網站 - 投票應用程序學習Django。我被困在part 3

當我爲「編寫第一個視圖」添加簡單的回調函數時,一切都很好。

當我得到「寫實際上做某事的視圖」時,我遇到了麻煩。

我跟着指示,以修改索引視圖:

  1. 添加一個新的方法的views.py(注 - 模板是從「投票/ index.html的」準備好):
  2. 添加索引。 HTML模板文件夾site-templates/polls/
  3. 修改settings.py指向site-templates文件夾

下面是我的views.py代碼:

from django.template import Context, loader 
from polls.models import Poll 
from django.http import HttpResponse 

def index(request): 
    latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5] 
    t = loader.get_template('polls/index.html') 
    c = Context({ 
     'latest_poll_list': latest_poll_list, 
    }) 
    return HttpResponse(t.render(c)) 

下面是我的settings.py行:

TEMPLATE_DIRS = ('/site-templates/') 

但是當我運行還是我得到這個消息:

TemplateDoesNotExist at /polls/ 
polls/index.html 
Request Method: GET 
Request URL: http://localhost:8000/polls/ 
Django Version: 1.2.1 
Exception Type: TemplateDoesNotExist 
Exception Value:  
polls/index.html 

異常在loader.py拋出。我調試設置是這樣的:

TEMPLATE_CONTEXT_PROCESSORS 
('django.core.context_processors.auth', 'django.core.context_processors.request') 
TEMPLATE_DEBUG 
True 
TEMPLATE_DIRS 
('/site-templates',) 
TEMPLATE_LOADERS  
('django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader') 

我的目錄結構是這樣的:

alt text

我錯過了什麼? settings.py是不正確的?請指教。

+0

您指定兩次'TEMPLATE_DIRS'的內容(第二個是正確的,第一不)。你真的在使用哪一個? – 2010-10-31 20:55:12

+0

你可以發佈你的文件夾層次嗎? – 2010-10-31 20:56:17

+0

第一個條目來自我的settings.py;第二個是我調用URL時回顯到瀏覽器的內容。 – duffymo 2010-10-31 21:05:38

回答

3

您必須在TEMPLATE_DIRS設置中使用絕對路徑。

方便的事情,在你的設置上,插入:

import os 
DIRNAME = os.path.abspath(os.path.dirname(__file__)) 

然後你在任何地方使用的路徑,使用os.path.join。 例如,您的TEMPLATE_DIRS將成爲:

TEMPLATE_DIRS = (
    os.path.join(DIRNAME, 'site-templates/'), 
) 
+1

仍然沒有 - 我收到相同的錯誤消息。 – duffymo 2010-10-31 21:18:09

+0

對不起,我從來沒有在windows上使用過django甚至python。我不知道 – zsquare 2010-11-01 08:35:19

+0

我在Linux和Windows上都看到過這樣的路徑。他所抱怨的是Template_dirs不能正確地作爲列表來遍歷。您理論上應該能夠通過執行遞歸列表並搜索模板文件夾來指定應用程序特定的模板目錄。然後將它們追加到列表中。多個條目Template_dirs列出a)不直觀地解析或b)根本不解析。我懷疑後者,因爲調試輸出只給我一個文件打開失敗/文件不存在錯誤,它是第一個條目。 – RobotHumans 2013-10-01 23:29:37

1

這必將解決問題,而不是所有上述嘗試添加僅低於settings.py線:

TEMPLATE_DIRS = (
    "appname/templates", 
) 
+0

你能解釋一下爲什麼你認爲這將*確定解決問題*? – djikay 2014-06-28 13:30:36

4

我面臨同樣的問題。我的錯誤是,'app'不在項目settings.py文件的INSTALLED_APPS列表中。

錯誤提示錯誤消息,他們建議類似的錯誤。

line 25, in get_template TemplateDoesNotExist(template_name, chain=chain) 
django.template.exceptions.TemplateDoesNotExist: authControll/index.html 

settings.py - >應用程序定義

INSTALLED_APPS = [ 
    ..., 
    'authControll' 
]