我正在使用驻留在现有项目中的Satchmo安装。这个项目有自己的模板,也有一些不同的应用程序安装的模板。其中一些特定于应用程序的模板有自己的app_base.html变体,期望从base.html派生出来。我希望能够对我的Satchmo模板做同样的事情,让它们驻留在我的项目的基础上,但是在所有这些模板周围都添加了一些额外的html。
)
- /store
- base.html (overriding Satchmo's base)
这个结构在某种程度上起作用,但不是我所期望的那样。在/store/base.html (Satchmo的基础)中,我只是用一条测试消息替换了所有内容。我可以看到消息,所以我知道satchmo正在加载它的基础,而不是站点的基础。但是,我不能再扩展项目的基础了,因为我使用:
{% extends "base.html %}会产生一个递归错误,因为它本身和下面的调用都无法工作。
{% extends "../base.html" %}我意识到,我可以将我的项目的base.html更改为一个稍微不同的名称,并将所有特定于应用程序的模板指向它们,但在模板结构的这样一个基本方面,它似乎是一个相当大的黑客。
发布于 2009-03-12 01:15:23
嗯,我不认为django会相对地查找类似的模板。
有点疯狂,但这应该管用:
/templates/store/base.html扩展"global_base.html"/templates/global_base.html扩展"base.html"发布于 2009-06-27 22:41:18
根据模板结构的设置方式,使用settings.TEMPLATE_LOADERS变量也可能是个好主意。
默认:('django.template.loaders.filesystem.load_template_source','django.template.loaders.app_directories.load_template_source'):知道如何从各种来源导入模板的可调用(作为字符串)的元组。关于Python程序员,请参阅Django模板语言。
有关此操作如何影响模板加载过程的更多信息:http://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types
从描述问题的方式来看,似乎通过注释掉"app_directories.load_template_source“文件行,您可能会更好地找到一种方法来完成您正在做的事情。
django.template.loaders.app_directories.load_template_source在文件系统上从
应用程序中加载模板。对于INSTALLED_APPS中的每个应用程序,加载程序都会查找一个模板子目录。如果目录存在,Django将在其中查找模板。
这意味着你可以用你自己的应用程序来存储模板。这也使得使用默认模板分发Django应用程序变得很容易。
例如,对于此设置:
INSTALLED_APPS =(‘myproject.polks’,'myproject.music') ...then get_template('foo.html')将按照以下顺序查找这些目录中的模板:
/path/to/myproject/轮询/ templates /foo.html /path/to/myproject/music/templates/foo.html注意,加载程序在第一次导入时执行优化:它缓存INSTALLED_APPS包具有模板子目录的列表。
默认情况下,此加载程序已启用.
发布于 2010-11-03 22:54:15
我只是遇到了同样的问题。看起来,satchmo开发人员计划在商店模板目录中放置一个“空”基。虽然这可能与你无关,但我想在这里看到这个。
您可以在模板目录中创建一个"shop“目录,并将主要的satchmo base.html复制到该目录中。
这对我有用。
https://stackoverflow.com/questions/636549
复制相似问题