Twig:包含另一个模板的块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Twig:包含另一个模板的块相关的知识,希望对你有一定的参考价值。
我想只包含另一个模板的某些块的内容。是否可以只访问块的内容而不是整个文件?
据我所知,embed
和include
总是包含并输出整个文件。并且use
导入所有块并且显然(?)目标文件需要硬编码,并且不能是传递给模板的表达式或变量。那是对的吗?
使用宏https://twig.symfony.com/doc/2.x/tags/macro.html
渲染块模板(由web profiler使用):https://twig.symfony.com/doc/2.x/functions/block.html
{{ block("title", "common_blocks.twig") }}
Symfony WebProfiler - Interesting usage of blocks and templates
Symfony WebProfiler就是一个很好的例子:
供应商/ symfony中/ symfony中/ src目录/ Symfony的/包/ WebProfilerBundle /资源/视图/收集/ request.html.twig
每个探查器视图模板都有3个块:
- 菜单
- 面板
- 工具栏
然后根据需要的时间呈现每个块。
工具栏示例:vendor / symfony / symfony / src / Symfony / Bundle / WebProfilerBundle / Resources / views / Profiler / toolbar.html.twig
<!-- START of Symfony Web Debug Toolbar -->
<div id="sfMiniToolbar-{{ token }}" class="sf-minitoolbar" data-no-turbolink>
<a href="#" title="Show Symfony toolbar" tabindex="-1" id="sfToolbarMiniToggler-{{ token }}" accesskey="D">
{{ include('@WebProfiler/Icon/symfony.svg') }}
</a>
</div>
<div id="sfToolbarClearer-{{ token }}" class="sf-toolbar-clearer"></div>
<div id="sfToolbarMainContent-{{ token }}" class="sf-toolbarreset clear-fix" data-no-turbolink>
{% for name, template in templates %}
{% if block('toolbar', template) is defined %}
{% with {
collector: profile.getcollector(name),
profiler_url: profiler_url,
token: profile.token,
name: name,
profiler_markup_version: profiler_markup_version,
csp_script_nonce: csp_script_nonce,
csp_style_nonce: csp_style_nonce
} %}
{{ block('toolbar', template) }}
{% endwith %}
{% endif %}
{% endfor %}
<a class="hide-button" id="sfToolbarHideButton-{{ token }}" title="Close Toolbar" tabindex="-1" accesskey="D">
{{ include('@WebProfiler/Icon/close.svg') }}
</a>
</div>
<!-- END of Symfony Web Debug Toolbar -->
使用partials
将是一个更好的解决方案。我不认为有可能在block
访问另一个templates
的twig
,总是我需要重用template
的部分我为他们创建一个partial
。
Partials可以遵循不同的路径,例如_partials/Header.twig.html
你也可以在模板中包含这个变量{% include '_partials/Header.twig.html' with {bar: 'foo'}%}
以上是关于Twig:包含另一个模板的块的主要内容,如果未能解决你的问题,请参考以下文章
连字符对于 Twig 中的块意味着啥,例如 % block body -%?
通过相对路径获取Twig文件,然后将其包含在app文件夹中的base.html.twig中