如何使项目模板和Satchmo模板共存?

时间:2009-03-11 21:57:20

标签: django django-templates satchmo

我正在使用驻留在现有项目中的Satchmo安装。该项目有自己的模板以及安装的各种应用程序的模板。其中一些特定于应用的模板有自己的app_base.html变体,期望从base.html派生形式。我希望能够使用我的Satchmo模板做同样的事情并让它们驻留在我的项目基础中,但是还要在所有项目的基础上添加一些额外的html。

  • /模板
    • base.html文件
    • 的index.html
    • /新闻
      • news_base.html(扩展base.html并添加新闻专用模板功能)
      • 的index.html
      • detail.html
    • /存储
      • base.html(覆盖Satchmo的基础)

这种结构有些作用,但不是我的预期。在/store/base.html(Satchmo的基础)我只是用测试消息替换了所有内容。我可以看到消息,所以我知道satchmo正在加载它的基础而不是网站的基础。但是,由于使用了以下内容,我无法扩展我的项目基础:

{% extends "base.html %}

因为调用自身而产生递归错误,以下内容根本不起作用。

{% extends "../base.html" %}

我意识到我可以将项目的base.html更改为略有不同的名称,并将所有特定于应用程序的模板指向它们,但它似乎是模板结构这样一个基本方面的一个非常重要的黑客。

3 个答案:

答案 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复制到该目录。

这对我有用。