在 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="hello there how are you">
</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>
@Bossman 评论的另一种方法是使用 {% if ... %}{% endif %}
我想生成一个 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="hello there how are you">
</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>
@Bossman 评论的另一种方法是使用 {% if ... %}{% endif %}