在 Twig 中动态生成/省略 HTML 属性

Dynamically generate / omit HTML attribute in Twig

我想生成一个 div,其中存在或不存在特定的 HTML 属性,以判断变量 my_var 是否已定义。如果已定义,则应将其值作为相应的属性。

my_var 要么未定义,要么等于由 space 分隔的几个单词组成的值(软件需要这些,我知道这不常见...)。

我试过以下方法:

<div class="container" {{ my_var ? "data-my-var='" ~ {{ my_var }} ~ "'" : ""}}>
</div>

但这会转义我使用的引号并在我的输出中产生这样的结果,my_var = hello there how are you:

<div class="container" data-my-var=&quot;hello there how are you&quot;>
</div>

当我使用

转义引号时,这不会改变
"data-my-var=\"" ~ {{ my_var }} ~ "\""

而不是上面写的。

我也试过简单地省略引号,所以这样做:

"data-my-var=" ~ {{ my_var }}

导致属性 data-my-var 输出时没有任何引号;因此只识别 my_var.

值的第一个单词

那么我怎样才能达到我想要的呢?

默认情况下,变量和与变量的串联未标记为安全。您将需要应用过滤器 raw 以将输出标记为安全。如果你只是return一个空字符串

,你也可以省略第二部分
<div class="container"{{ my_var ? (' data-my-var="' ~my_var ~ '"')|raw }}>
</div>

demo


@Bossman 评论的另一种方法是使用 {% if ... %}{% endif %}