TWIG 中的动态块名称
我需要在模板中添加多个块,每个块都有不同的名称。
{% for item from items %}
{% block item.name %}sometext{% endblock %}
{% endfor %}
但我收到错误。我该怎么做?
在
I need to add multiple blocks in my template, every with different name.
{% for item from items %}
{% block item.name %}sometext{% endblock %}
{% endfor %}
But I get error. How can I do this ?
In
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
Twig 无法使用动态块名称。 GitHub 上对此进行了讨论。
Dynamic block names are not possible with Twig. There has been a discussion about it over at GitHub.
您可以使用
block
函数动态加载块。block
函数的 Twig 文档You can load blocks dynamically using the
block
function.Twig documentation for the
block
function如果我正确理解了这个问题,你可以这样做(使用父上下文):
parent.html.twig
override.html.twig
If I understood the question correctly, you can do this (use parent context):
parent.html.twig
override.html.twig
我试图做同样的事情,并使用 template_from_string< 找到了解决方案/a> 函数。
_items.html.twig
page.html.twig
发生的情况是块标签最初被创建为文本。然后我们使用 include 函数来获取渲染的内容
_items
,作为字符串。最后,我们将该字符串转换为工作模板(我们可以嵌入< /a> 或 扩展)。这是有效的,因为
template_from_string
函数将在运行时创建并编译模板,而通常 twig 是预先编译的并且在运行时不变。I was attempting to do the same thing and found a solution using the template_from_string function.
_items.html.twig
page.html.twig
What's happening is the block tags are initially being created as text. Then we use the include function to get the rendered content of
_items
, as a string. Finally, we convert that string to a working template (which we can embed or extend).This works because the
template_from_string
function will create and compile a template at runtime, where as normally twig is compiled before hand and unchanged at runtime.