我想在循环内使用模板变量(作为字符串)。
{# Define my template #}
{% set my_template %}
<span>{{ job.title }}</span>
...
{% endset %}
{# Using the template inside a loop #}
{% for job in jobs %}
{{ include(template_from_string(my_template), { 'job', job }) }}
{% endfor %}
我希望它显示带有“作业”对应值的模板内容,但是出现错误:“未定义可变作业”
答案 0 :(得分:0)
使用宏 https://twig.symfony.com/doc/2.x/tags/macro.html
{% macro my_template(job) %}
<span>{{ job.title }}</span>
...
{% endset %}
{# Using the template inside a loop #}
{% for job in jobs %}
{{ include(template_from_string(_self.my_template(job)), { 'job', job }) }}
{% endfor %}
答案 1 :(得分:0)
我认为您的include
调用在传递参数时出错。您正在提供常规数组而不是哈希(使用逗号而不是冒号):
{{ include(template_from_string(_self.my_template(job)), { 'job': job }) }}
答案 2 :(得分:0)
另一种选择是使用 verbatim
标签。
这会停止 twig 解析变量,并强制使用字符串,以便我们稍后可以作为 twig 模板运行。
没有 verbatim
:
{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}
{% set my_template %}
<span>{{ job }}</span>
{% endset %}
{# Using the template inside a loop #}
{% for job in jobs %}
{{ include(template_from_string(my_template), { 'job': job }) }}
{% endfor %
输出:outside outside
(错误)
与 verbatim
:
{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}
{% set my_template %}
{% verbatim %}
<span>{{ job }}</span>
{% endverbatim %}
{% endset %}
{# Using the template inside a loop #}
{% for job in jobs %}
{{ include(template_from_string(my_template), { 'job': job }) }}
{% endfor %
输出:11 22
(正确)
奖励 - Drupal - 没有 template_from_string() With verbatim
:
{# Define my template #}
{% set jobs = ['11', '22'] %}
{% set job = 'outside' %}
{% set my_template %}
{% verbatim %}
<span>{{ job }}</span>
{% endverbatim %}
{% endset %}
{# Using the template inside a loop #}
{% for job in jobs %}
{{ {'#type': 'inline_template', '#template': my_template, '#context': {'job': job} } }}
{% endfor %
输出:11 22
(正确)