我专门使用 Django 和 Jinja2。这是我第一次尝试在没有 CMS 帮助的情况下使用模板来选择哪些模板并将它们放在一起。
出于某种原因,我似乎无法理解一堆碎片是如何组合在一起的。
我对这些概念感到满意:
- 模板引擎处理模板和模型以产生有用的结果。
- 模板文件描述了如何将模型数据放入其中以产生该结果。
- 应用程序开发人员以编程方式与表示模板文件的引擎和模板对象进行交互。程序员负责选择模板文件,提供数据,并将其全部交给引擎。然后做一些有用的事情,引擎会返回。
但我正在努力解决的是:
- 可以编写模板文件以相互继承,从而促进 DRY。
- 模板文件包含有关其继承的信息。
而现在我倒下了。
- 这是如何运作的?这种关系在系统中的什么地方使用?
- 如果我将基本模板传递给引擎,引擎如何知道应该使用哪些子模板?
- 如果我将一个子模板传递给引擎,好吧,该模板包含有关它扩展的模板的信息,但是如果父模板需要的不仅仅是一个子模板怎么办?
我觉得我对全局有错误的理解。也许我不明白哪些职责属于模板,哪些属于应用程序?
非常感谢!
编辑:
我想我第一次尝试阐明我的问题并没有奏效。这是另一个镜头:
图 1 显示了我拥有的一些模板(假设)。有一个基本模板、一个页眉模板,以及正文、侧边栏和页脚模板各两个。
有一棵继承树。每个模板都指定(如果可能的话)它扩展了哪个模板。
这就是问题所在。只考虑正文和页脚模板。他们扩展了基地。但在我的理解中,我只能选择其中之一进行渲染。如果我选择其中一个主体,那么我无法选择我想要的页脚。如果我选择其中一个页脚,那么我无法选择我想要的正文。如果我希望能够同时选择正文和页脚,在我的理解中,我必须编写四个模板,每个组合一个。当然这不可能是它的工作原理?
然后我们有侧边栏。假设我继续制作这四个模板。那么,我的侧边栏应该扩展四个中的哪一个?如果我希望能够为所有四个布局选择任一侧边栏,那么我现在必须创建八个模板!图 2 显示了不同的组合。
在一个实际项目中(不仅仅是像我正在从事的个人项目),我希望处理的不仅仅是这些事情。除了已经描述的不同布局之外,我还需要侧边栏中的不同块,根据用户是否登录的不同布局,各种各样的东西。我可以很容易地想象需要编写数百个模板来涵盖所有可能性。
如果这确实是模板系统的工作方式,那么我应该改用什么?