我正在使用驻留在现有项目中的Satchmo安装。该项目有自己的模板以及安装的各种应用程序的模板。其中一些特定于应用的模板有自己的app_base.html变体,期望从base.html派生形式。我希望能够使用我的Satchmo模板做同样的事情并让它们驻留在我的项目基础中,但是还要在所有项目的基础上添加一些额外的html。
这种结构有些作用,但不是我的预期。在/store/base.html(Satchmo的基础)我只是用测试消息替换了所有内容。我可以看到消息,所以我知道satchmo正在加载它的基础而不是网站的基础。但是,由于使用了以下内容,我无法扩展我的项目基础:
{% extends "base.html %}
因为调用自身而产生递归错误,以下内容根本不起作用。
{% extends "../base.html" %}
我意识到我可以将项目的base.html更改为略有不同的名称,并将所有特定于应用程序的模板指向它们,但它似乎是模板结构这样一个基本方面的一个非常重要的黑客。
答案 0 :(得分:0)
嗯,我不认为django比较喜欢查找模板。
有点疯狂的黑客,但这应该有效:
/templates/store/base.html
扩展"global_base.html"
/templates/global_base.html
扩展"base.html"
答案 1 :(得分:0)
根据您设置模板结构的方式,使用settings.TEMPLATE_LOADERS变量也可能是个好主意。
TEMPLATE_LOADERS默认值: ( 'django.template.loaders.filesystem.load_template_source', 'django.template.loaders.app_directories.load_template_source') 一个可调用的元组(作为字符串) 知道如何从中导入模板 各种来源。见Django 模板语言:适用于Python 程序员。
有关这将如何影响模板加载过程的更多信息: http://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types
从您描述问题的方式来看,似乎通过评论“app_directories.load_template_source”文件行,您可以更好地找到一种方法来完成您正在做的事情。
django.template.loaders.app_directories.load_template_source 从Django应用程序加载模板 文件系统。对于每个应用程序 INSTALLED_APPS,加载器寻找一个 templates子目录。如果 目录存在,Django寻找 那里的模板。
这意味着您可以存储模板 与您的个人应用程序。这也是 使分发Django变得容易 带有默认模板的应用。
例如,对于此设置:
INSTALLED_APPS =('myproject.polls', 'myproject.music')......然后 get_template('foo.html')将寻找 这些目录中的模板 这个顺序:
/path/to/myproject/polls/templates/foo.html /path/to/myproject/music/templates/foo.html 请注意,加载程序执行 首次优化 导入:它缓存一个列表 INSTALLED_APPS包有一个 templates子目录。
默认情况下启用此加载程序。
答案 2 :(得分:0)
我刚遇到同样的问题。看起来satchmo开发人员计划通过在商店模板目录中放置一个“空”基础。虽然这可能与你不相关,但我想在这里看到这一点。
您可以在模板目录中创建一个“shop”目录,并将主satchmo base.html复制到该目录。
这对我有用。