我有一个对象变量,当从里面 for x in y
循环访问时,它只包含数据。
这发生在Drupal 8主题的字段模板中,其目标是访问兄弟字段的值。
简化代码段:
{% for x in [1] %}
Inside loop = {{ _parent.element['#object'].get('field_section_theme').value }}
{% endfor %}
Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}
输出:
Inside loop = normal
Outside loop =
我理解在循环中 set 的变量是否在其外部不可用,但这与模板本身的_context
无关。
我在一个简单的一次性for
循环中包装对变量的引用的解决方法已经解决了我的问题,但我很想知道这里发生了什么!
(我也更喜欢比for x in [1]
方法更清洁的方法,但通常只要你想要写出来就执行一些东西!)
答案 0 :(得分:2)
这是一个范围错误,基于我对_parent
的定义方式和位置的误解 - 我认为它是由Drupal提供的,逻辑上我正在渲染的字段的“父”是节点实体,它又包含我想要引用的其他字段。
但是,_parent
似乎是一个树枝构造,在循环中的_parent
指向模板的主要范围,而{{ 1}} 外面循环毫无意义。
事后看来这很明显,但是因为我的代码在一个循环中开始生活并且 self>父母>兄弟姐妹路径我使用有意义(在Drupal上下文中)我无法理解为什么变量在循环外不可用。
我根本找不到有关_parent
的有用文档,所以任何链接都会受到赞赏。
修复我的特定问题就像从“外部循环”访问路径中删除_parent
一样简单,即更改
_parent
到
Outside loop = {{ _parent.element['#object'].get('field_section_theme').value }}