Django教程 - /polls/处的TemplateDoesNotExist

2 投票
6 回答
11681 浏览
提问于 2025-04-16 06:11

我试了无数次想让这个东西正常工作。放了一周没碰它,回来后又试了一遍。我在网上查了很多资料,读了所有相关的帖子。还让一些不懂的人在消息组里嘲笑我,但始终没找到答案。我只想让它正常运行。当我跟着Django教程的第三部分走,到了制作首页模板的那一步,结果在浏览器里查看时,出现了 TemplateDoesNotExist at /polls/ 的错误。我检查了文件的归属,移动了文件位置,一直在 setting.py 里修改 TEMPLATES_DIR。我还用命令查看文件内容,确保它是正常的。为了让这个东西工作,我甚至做了一些奇怪的仪式。现在我向你们求助。我知道这可能是个很傻的问题,我对此几乎没有怀疑。我只想让它正常工作。

我不确定你们需要哪些代码或错误信息,如果需要请告诉我,我会发给你们。我是在Ubuntu 10.10上做这个的。

编辑

来自 settings.py 的内容:

TEMPLATE_DIRS = (
    "home/kevin/first/tutorial/temps"
)

这个文件以前在家目录里,但我把它移到了项目文件夹里,以为这样会有帮助。

文件结构(省略所有编译后的Python文件):

~/first/tutorial/:
__init__.py,
manage.py,
polls,
settings.py,
temps,
tut.db,
urls.py

temps:
index.html

polls:
admin.py,
__init__.py,
models.py,
tests.py,
views.py,

6 个回答

1

在我的 settings.py 配置文件中,我使用的是:

"TEMPLATE_DIRS = (
             '/path/to/folder/Python-templates',
)"

这个设置是有效的。我猜测(如果我错了请纠正我)在django教程中的例子是指模板文件在模板文件夹中的具体位置,也就是 polls 文件夹。因此,在这个教程中的例子里,polls/index.html 这个文件路径的意思是“在 settings.py 中指定的模板文件夹里,polls 文件夹中的 index.html 文件”。

2

首先,这可能和你的问题无关,但在文件中不使用绝对路径是个好习惯。我在我的 settings.py 文件中总是这样写:

PROJECT_ROOT = os.path.realpath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, 'templates'),
)

在元组的每个元素后面都应该加一个逗号,即使它是唯一的一个或者最后一个,这样Python才能把它当作元组来处理,而不是变成其他类型。

你还需要确保你的 TEMPLATE_LOADERS 设置包含或者看起来像这样:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
)

如果这样做还是不行(不过上面的设置还是要保留),那么问题很可能和你正在渲染的模板有关。确认一下你在视图中使用的模板字符串和你 templates 目录下的模板相对路径是否对应。换句话说,如果在视图中模板字符串是 'polls/index.html',那么确保这个文件实际上位于 templates/polls/index.html 这个位置。

8
>>> TEMPLATE_DIRS = ( "home/kevin/first/tutorial/temps" )
>>> print TEMPLATE_DIRS
home/kevin/first/tutorial/temps
>>> type(TEMPLATE_DIRS)
<type 'str'>

这是一个字符串,不是元组。

TEMPLATE_DIRS = ( "home/kevin/first/tutorial/temps", )

那是一个元组。这是Python中的一个小陷阱。

此外,使用绝对路径而不是相对路径。

撰写回答