Python 如何修复模板加载器以检查根目录?

Python 如何修复模板加载器以检查根目录?,python,django,django-templates,satchmo,Python,Django,Django Templates,Satchmo,我有一个这样的目录结构(根据satchmo文档,这是默认的推荐结构): 我的URL有about.html和home.html的条目,它们都扩展了base.html。然而,当我访问URL时,我得到了一个通用的satchmo页面,其中包含了我在about和home中包含的一些文本,但它根本没有扩展base.html。在安装satchmo之前,我可以确认它是否正常工作,但现在我不确定出了什么问题。我假设它扩展了其他一些base.html,因为如果我将扩展改为master.html,它会抛出Templa

我有一个这样的目录结构(根据satchmo文档,这是默认的推荐结构):

我的URL有about.html和home.html的条目,它们都扩展了base.html。然而,当我访问URL时,我得到了一个通用的satchmo页面,其中包含了我在about和home中包含的一些文本,但它根本没有扩展base.html。在安装satchmo之前,我可以确认它是否正常工作,但现在我不确定出了什么问题。我假设它扩展了其他一些base.html,因为如果我将扩展改为master.html,它会抛出TemplateDoesNotExist异常(我也不确定如何解决)。我的settings.py中有以下内容:

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

TEMPLATE_DIRS = (
    'templates',
)

如果我将templates目录移动到Project中的site文件夹,它似乎可以工作,但我不希望它出现在那里。我尝试将“../../templates”添加到TEMPLATE_DIRS中,但这也不起作用,即使这样做了,我也不确定对于我在应用程序文件夹的某些级别下声明的模板,这将如何交互。解决这个问题的正确方法是什么?

TEMPLATE\u 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位于templates目录中,那么该错误也应该得到修复


BASE\u DIR
的is“basis”是
dirname(\uuu file\uuu)
,它返回包含当前文件的目录
settings.py
。然后,结果是用
“…”
连接
ed两次,也就是说,我们向上走了两个目录,所以现在我们在顶部的“站点”目录中。我们调用
abspath
以确保它是绝对路径,调用
normpath
以删除双斜杠等。您能解释一下BASE_DIR赋值的实际作用吗?我是Python新手,不太确定。我还从某处复制了这个作业
BASE\u DIR=os.path.dirname(os.path.dirname(\uu file\uu))
。这是如何影响的?我刚刚通过了调试器,BASE_DIR的结果是相同的。它也不能解决这个问题。编辑:我假设你的作业应该从我已有的目录往上一个目录,但它似乎不起作用。
BASE\u dir
的一个目录应该起作用,我在生产中得到了这个确切的代码。但是再看一遍,您需要向上移动两个DIR(
site/projects/site/settings.py
site/templates/
,因此需要将
projects/site
从settings.py的dirname中“删除”以获得
site
作为
BASE\u DIR
)的绝对路径,好的,所以我没有注意到它在
local\u settings.py
中被覆盖。它现在确实起作用了。顺便说一句,这样的设置是否最好是“仅限全局”,因为它在投入生产后不应更改?我从其他地方复制了这些设置,所以一开始我不想破坏任何设置。您如何使用
local_settings.py
?您是在
settings.py中从本地设置导入*
,还是反过来?这两个文件都受源代码管理吗?
import os
from os.path import normpath, abspath, dirname, join
BASE_DIR = normpath(abspath(join(dirname(__file__), '..', '..')))
TEMPLATE_DIRS = (
    join(BASE_DIR, 'templates'),
)