提问人:DevelJoe 提问时间:2/9/2022 最后编辑:DevelJoe 更新时间:2/9/2022 访问量:347
在 Twig 中动态生成/省略 HTML 属性
Dynamically generate / omit HTML attribute in Twig
问:
我想生成一个 div,其中存在或不存在特定的 HTML 属性,以决定是否定义了变量。如果已定义,则应将其值用作相应的属性。my_var
my_var
要么未定义,要么等于由空格分隔的几个单词组成的值(软件需要这些,我知道这并不常见......
我尝试了以下方法:
<div class="container" {{ my_var ? "data-my-var='" ~ {{ my_var }} ~ "'" : ""}}>
</div>
但这转义了我使用的引号,并在我的输出中产生了这样的 sth,其中: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
那么,我怎样才能达到我想要的呢?
答:
1赞
DarkBee
2/9/2022
#1
默认情况下,变量和与变量的串联不会标记为安全。您需要应用过滤器以将输出标记为安全。此外,如果您只返回一个空字符串,您可以省略第二部分raw
<div class="container"{{ my_var ? (' data-my-var="' ~my_var ~ '"')|raw }}>
</div>
正如 @Bossman 所评论的那样,另一种方法是使用{% if ... %}{% endif %}
评论
0赞
DevelJoe
2/9/2022
灿烂,像魅力一样工作。我已经接受了你的提议作为答案,因为它更接近我的语法,希望这对@Bossman没问题!
0赞
Bossman
2/9/2022
@DevelJoe完全没问题,只要你得到你需要的东西。我总是想到“奥卡姆剃刀”和除了我自己之外的任何人的可读性:)
0赞
DevelJoe
2/9/2022
仅供参考,我的语法解析器实际上报告说,您不允许在标签内编写 twig 标签,只能编写 twig 表达式(尽管解析与采用的 twig 标签解决方案完美配合)。但是语法解析器和 twig 是另一本书的章节。.{% if ... %}{% endif %}
评论
{% if my_var %}data-my-var="{{ my_var }}"{% endif %}