如果重要的话,我有这样的目录结构(根据satchmo文档,这是默认的推荐结构):
site
- apps
| - __init__.py
- config
- projects
| - site
| - home
| - templates
| - about.html
| - home.html
| - models.py, views.py, admin.py
| - __init__.py
| - local_settings.py
| - settings.py
| - urls.py
| - wsgi.py
| - __init__.py
- static
| - css
| - images (maybe this got autogenerated?)
| - js
| - media
- templates
| base.html
- manage.py
我的网址包含about.html和home.html的条目,两者都扩展了base.html。但是,当我访问这些URL时,我会获得一般的satchmo页面,其中包含我从about和home中包含的一些文本,但它根本没有扩展base.html。在我安装satchmo之前,我可以确认这是有效的,但现在我不确定出了什么问题。我假设它正在扩展其他一些base.html,因为如果我将我的extend更改为master.html,它会抛出TemplateDoesNotExist异常(我也不确定如何解决)。我在settings.py中有以下内容:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
'templates',
)
如果我将模板目录移动到项目中的站点文件夹,它似乎可以工作,但我不希望它在那里。我尝试将'../../templates'添加到TEMPLATE_DIRS,但这也不起作用,即使它确实如此,我也不确定这将如何与我在app文件夹的某些级别下声明的模板进行交互。解决这个问题的正确方法是什么?
答案 0 :(得分:2)
TEMPLATE_DIRS
条目应该是绝对路径。你可以这样做:
import os
from os.path import normpath, abspath, dirname, join
BASE_DIR = normpath(abspath(join(dirname(__file__), '..', '..')))
TEMPLATE_DIRS = (
join(BASE_DIR, 'templates'),
)
如果您的master.html在您的模板目录中,那么该错误也应该修复。
BASE_DIR
的'基础'是dirname(__file__)
,它返回包含当前文件settings.py
的目录。然后,结果是join
和'..'
两次,也就是说,我们进入两个目录,所以现在我们位于顶部的“site”目录中。我们调用abspath
来确保它是一个绝对路径,并normpath
删除双斜杠等。