如何在树枝模板中获取原始字段值?


27

myfield是纯文本字段。{{ content.field_myfield }}使用HTML标记和字段标签呈现该字段。

如何呈现字段的原始值?{{ content.field_myfield.value }}不起作用。

Answers:


45

{{ entity.field_name.value }} 以获得真正的原始值,包括标签和编码。

  • 例: {{ node.body.value }}
  • 结果: <p>Batman &amp; Robin</p>

{{ content.field_name.0 }} 获取原始值减去标签和编码。

  • 例: {{ content.body.0 }}
  • 结果: Batman & Robin

生的

只要有可能,都应避免使用此过滤器,尤其是在您输出可能由用户输入的数据时。有关在Drupal 8中自动转义的更多信息,请参见此页面

来源:过滤器-修改Twig模板中的变量

原始过滤器将该值标记为“安全”,这意味着在启用了自动转义的环境中,如果将原始变量应用到该变量,则不会对该变量进行转义

来源:Twig的官方文档


例如,您可以使用:

{{ node.body.value|striptags }}
{{ paragraph.field_text.value|striptags }}

使用细枝的| striptags的问题是html实体的双重编码,而不是标记,因此&变为&,然后&amp; –贝尔迪尔


6
内容示例不正确。参见drupal.stackexchange.com/questions/198694/…。您可以使用的是content.field_text.0,那么您只会获得第一个字段项的内部,而没有字段模板。这对于列表,引用等特别有用,您需要的是格式化输出,而不是原始值
Berdir

2
更好,但仍然不太正确。content.field_myfield | striptags不起作用,您无法向其传递渲染数组。您需要先渲染它,然后再通过它。剥离标签等也存在&和其他可以两次编码的字符的问题,因此您实际上实际上需要| striptags | raw。
贝迪尔

2
| raw会留下html标记并进行打印。然后| striptags的问题是html实体的双重编码,而不是标记,因此&变成&amp; 然后&amp; amp;
贝尔迪尔

2
这不是两次转义,您可以看到<>正确显示。在输出之前,“&”号可能已经被转义了。但是问题是关于纯文本字段,而不是由文本过滤器处理的格式化文本字段。(要回答这个不问的问题,.value出于安全原因,原始值(如果有人真的想要)仍然存在,并且可以正确地由Twig对其进行了转义,因为您永远不应输出未经过滤的格式化文本字段)
4k4

2
是的,这就是我的意思(自动转义=单次转义)。因此,仅在不使用剥离标签过滤器的情况下,用于输出实体字段值的示例才是完美的,因为这会产生难看的双转义输出。(顺便说一句&amp;,您的示例中的输出是错误的,除非字段内容已被转义一次,否则在自动转义中不会发生这种情况)。
4k4

5

在这种情况下,您可以使用“ 枝条字段值”模块。安装此模块后,您将可以访问字段渲染数组中的部分数据。对于前。

{{ content.field_name|field_value }}
content.field_image|field_target_entity.uri.value

等等。有关项目页面的更多信息


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.