代码之家  ›  专栏  ›  技术社区  ›  Soviut

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

  •  2
  • Soviut  · 技术社区  · 16 年前

    我正在使用一个驻留在现有项目中的SATCHMO安装。这个项目有自己的模板以及安装的各种应用程序的模板。这些特定于应用程序的模板中,有些有自己的app_base.html变体,它们希望派生出form base.html。我希望能够对我的Satchmo模板做同样的事情,并让它们驻留在我的项目的基础上,但也有一些额外的html添加在所有这些模板周围。

    • /模板
      • 基.html
      • index.html索引
      • /新闻
        • news_base.html(扩展base.html并添加特定于新闻的模板功能)
        • index.html索引
        • detail.html详细信息
      • /商店
        • base.html(覆盖Satchmo的基)

    这个结构有点用,但不是我所期望的。在/store/base.html(Satchmo的base)中,我只是用一条测试消息替换了所有内容。我可以看到消息,所以我知道satchmo正在加载它的基础,而不是站点的基础。但是,我不能再扩展我的项目的基础,因为使用:

    {% extends "base.html %}
    

    产生递归错误,因为它的调用本身和下面的根本不起作用。

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

    我意识到我可以将项目的base.html改为一个稍有不同的名称,并将所有特定于应用程序的模板指向它们,但这似乎是对模板结构这一基本方面的一个相当大的攻击。

    3 回复  |  直到 16 年前
        1
  •  0
  •   Matthew Marshall    16 年前

    嗯,我不认为django会像那样查找模板。

    有点疯狂,但这应该管用:

    • /templates/store/base.html 延伸 "global_base.html"
    • /templates/global_base.html 延伸 "base.html"
        2
  •  0
  •   TomFuertes    16 年前

    根据模板结构的设置方式,使用settings.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_源 从Django应用程序加载模板 文件系统。对于中的每个应用程序 已安装的应用程序,加载程序将查找 模板子目录。如果 目录存在,Django查找 里面有模板。

    这意味着您可以存储模板 你的个人应用。这也是 便于分发Django 具有默认模板的应用程序。

    例如,对于此设置:

    已安装的应用程序=(“myproject.polls”, “myproject.music”)…然后 get_template('foo.html')将查找 这些目录中的模板 本订单:

    /路径/to/myproject/polls/templates/foo.html /路径/to/myproject/music/templates/foo.html 注意,加载程序执行 第一次优化时 导入:它缓存一个列表 已安装的应用程序包具有 模板子目录。

    默认情况下,此加载程序已启用。

        3
  •  0
  •   ubiquitousthey    15 年前

    我也有同样的问题。看起来satchmo开发人员计划在shop模板目录中放置一个“空”基。虽然这可能不再与你相关,但我想在这里看到这一点。

    您可以在模板目录中创建一个“shop”目录,并将main satchmo base.html复制到该目录中。

    这对我有效。

    推荐文章