2010-10-31 226 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' 
]