模板语言/引擎如DTL和Jinja如何表达和管理各种模板文件之间的关系?

时间:2017-02-11 03:21:53

标签: python django jinja2 templating templating-engine

我特意使用Django和Jinja2。这是我第一次尝试使用模板而没有CMS的帮助来选择哪些模板并将它们放在一起。

出于某种原因,我似乎无法理解一堆碎片是如何组合在一起的。

我对这些概念感到满意:

  • 模板引擎处理模板和模型以产生有用的结果。
  • 模板文件描述了如何将模型数据拟合到其中以产生该结果。
  • 应用程序开发人员以编程方式与代表模板文件的引擎和模板对象进行交互。程序员负责选择模板文件,提供数据并将其全部交给引擎。然后做一些有用的结果,引擎回馈。

但我正在努力的是:<​​/ p>

  • 可以编写模板文件以相互继承,从而促进DRY。
  • 模板文件包含有关其继承的信息。

现在我摔倒了。

  1. 这是怎么回事?系统中使用这种关系的地方是什么?
  2. 如果我将基本模板传递给引擎,引擎如何知道应该使用哪些子模板?
  3. 如果我将子模板传递给引擎,那么,该模板包含有关其扩展的模板的信息,但如果父模板需要的模板多于一个子模板,该怎么办?
  4. 我感觉到我有一个错误的,全局的理解。也许我不了解哪些职责属于模板,哪些责任属于应用程序?

    非常感谢!

    修改

    我想我第一次尝试阐明我的问题并不奏效。这是另一个镜头:

    Some templates

    图1显示了我的一些模板(假设)。有一个基本模板,一个标题模板,以及一个正文,侧边栏和页脚模板中的两个。

    有一棵继承树。每个模板指定(如果可能,在我的理解中)它扩展了哪个模板。

    这就是问题所在。只考虑正文和页脚模板。它们扩展了基础。但根据我的理解,我只能选择其中一个进行渲染。如果我选择其中一个尸体,那么我就无法选择我想要的那个。如果我选择其中一个页脚,那么我就无法选择我想要的那个。如果我想能够选择正文和页脚,根据我的理解,我必须编写四个模板,每个模板一个。当然这不可能是如何运作的?

    然后我们有侧边栏。假设我继续制作这四个模板。那么,我的侧边栏应该延伸到四个中的哪一个?如果我希望能够为所有四种布局选择任一侧边栏,那么我现在必须创建八个模板!图2显示了不同的组合。

    在一个实际项目中(不仅仅是像我正在进行的个人项目),我希望不仅仅需要处理这些事情。除了已经描述的不同布局之外,我需要在侧边栏中使用不同的块,不同的布局取决于用户是否登录,各种各样的东西。我很容易想象需要编写数百个模板来涵盖所有可能性。

    如果这确实是模板系统的工作原理,那么我应该使用什么呢?

1 个答案:

答案 0 :(得分:0)

但这些不受支持的工作流程。有意义的唯一情况是扩展父级的子级,并将子级发送到模板引擎。

任何模板也可以直接包含其他模板,但这不是继承链的一部分。