问题和反馈
许可证
嫩枝欧宝官网下载app新BSD许可下吗许可证。
< /div>< /div>嵌入
的嵌入
标记结合的行为包括和扩展。它允许您将另一个模板的内容,就像包括
所做的事。但它还允许您覆盖任何块内定义包括模板,当扩展模板。
认为嵌入式模板是一个“微布局框架”。
1 2 3 4 5 6 7 8 9 10
{%嵌入“teasers_skeleton。树枝“%}在“teasers_skeleton{#这些块的定义。树枝“#}{#我们覆盖他们这里:#}{%块left_teaser %}一些内容的左急转弯盒子{%endblock%}{%块right_teaser %}一些内容的诱惑{%endblock%}{%endembed%}
的嵌入
标签需要模板继承的概念内容片段的水平。文档模板继承允许“骨架”,充满了生活的孩子模板嵌入
标记允许您创建的“骨架”小单位的内容和重用和填充你喜欢的任何地方。
由于用例可能不太明显,让我们看看一个简化的例子。想象一个由多个HTML页面共享的基本模板,定义一个单块名叫“内容”:
1 2 3 4 5 6 7 8 9 10 11 12
页面布局┌────────────────────────┐│││┌──块“内容”──┐│││││││││││(子模板││││把内容放在这里)│││││││││││└─────────────────────┘│││└─────────────────────────────────────┘
一些页面(“foo”和“酒吧”)共享相同的内容结构——两个垂直堆叠框:
1 2 3 4 5 6 7 8 9 10 11 12
页面布局┌────────────────────────┐│││┌──块“内容”──┐│││┌─块“顶级”───┐││││││││││└─────────────────┘││││┌─块“底部”┐││││││││││└─────────────────┘│││└─────────────────────┘│││└─────────────────────────────────────┘
而其他页面(“繁荣”和“巴兹”)分享不同的内容结构-并排两个盒子:
1 2 3 4 5 6 7 8 9 10 11 12
页面布局┌────────────────────────┐│││┌──块“内容”──┐│││││││┌块┐┐┌块│││││“左”││“正确”│││││││││││││││││││││└───────┘└───────┘│││└─────────────────────┘│││└─────────────────────────────────────┘
没有嵌入
标签,你有两种方法来设计模板:
- 创建两个“中间”基础模板,延长主布局模板:一个垂直堆叠盒使用的“foo”和“酒吧”页面,另一个箱子并排的“繁荣”和“巴兹”页面。
- 嵌入的标记上/下和左/右框直接到每个页面模板。
而言这两个解决方案做得并不是很好,因为他们都有一个主要的缺点:
- 第一个解决方案可能确实在这个简单的示例工作。但想象我们添加一个侧边栏,这可能又包含不同,循环结构的内容。现在我们需要为所有发生的组合创建中间基础模板的内容结构和侧栏结构……等等。
- 第二个解决方案涉及到重复的通用代码与所有它的负面影响:任何变化包括查找和编辑所有受影响的副本结构,必须验证正确性对于每个副本,副本由粗心的修改可能会不同步等。
在这种情况下,嵌入
标签方便。常见的布局代码可以生活在一个基础模板,和两个不同的内容结构,我们称之为“微观布局”进入单独的模板嵌入是必要的:
页面模板foo.twig
:
1 2 3 4 5 6 7 8 9 10 11 12 13
{%扩展“layout_skeleton。树枝“%}{%块内容%}{%嵌入“vertical_boxes_skeleton。树枝“%}{%块顶级%}机顶盒的一些内容{%endblock%}{%块底%}一些内容框底部{%endblock%}{%endembed%}{%endblock%}
这里的代码vertical_boxes_skeleton.twig
:
1 2 3 4 5 6 7 8 9 10 11
<div类=“top_box”>{%块顶级%}机顶盒的默认内容{%endblock%}< /div><div类=“bottom_box”>{%块底%}底框默认内容{%endblock%}< /div>
的目标vertical_boxes_skeleton.twig
模板被分解出框的HTML标记。
的嵌入
标记有相同参数的包括
标签:
1 2 3 4 5 6 7 8 9 10 11
{%嵌入“基地”{“foo”:“酒吧”}%}…{%endembed%}{%嵌入“基地”{“foo”:“酒吧”}只有%}…{%endembed%}{%嵌入“基地”忽略失踪%}…{%endembed%}
警告
由于嵌入模板没有“名字”,auto-escaping策略基于模板名称无法正常工作如果你改变上下文(例如,如果您在HTML中嵌入一个CSS / JavaScript模板)。在这种情况下,显式地设置默认auto-escaping策略的autoescape
标签。
另请参阅