我正在使用短条件来区分记录列表中显示的值。
例如,如果我希望标识符大于100的客户的名称强调(<em> </em>
),请执行以下操作:
{# Displays the identifier of the client #}
{% set strClient = '<em>' ~ client.name ~ '</em>' %}
{{ Client.id > 100 ? strClient|raw : client.name }}
此处浏览器处理HTML ,客户名称显示为强调,事实是,例如,如果您要显示您的手机,则可以为null或不,如果没有显示消息强调;我执行以下操作:
{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>' }}
在后一种情况下,浏览器不会处理 HTML标记并显示为纯文本,我也尝试了以下内容:
{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>'|raw }}
这一个:
{# Displays the customer phone or message if there #}
{% set strClient = '<em> Not found </em>' %}
{{ Client.id > 100 ? client.tel : strClient|raw }}
使用相同的结果,即何时是字符串,存储在变量中,或者不会获得始终显示为处理明文的HTML标记。
是否有人知道如何解释树枝中的HTML字符串?
答案 0 :(得分:4)
当使用带有tenary的原始过滤器时,如果需要将整个语句包装在括号中以使其工作。
E.g。 {{ (Client.id > 100 ? client.tel : '<em> Not found </em>')|raw }}
答案 1 :(得分:2)
在我对你的例子的测试中,没有任何尝试有效,包括你的第一个例子:
{# Displays the identifier of the client #}
{% set strClient = '<em>' ~ client.name ~ '</em>' %}
{{ Client.id > 100 ? strClient|raw : client.name }}
但是,如果您使用{% autoescape false %}
和{% endautoescape %}
包装示例,则应解决此问题。如果包装如下,所有示例都应按预期显示:
{% autoescape false %}
{# Displays the customer phone or message if there #}
{{ Client.id > 100 ? client.tel : '<em> Not found </em>' }}
{% endautoescape %}
如果使用autoescape,则无需|raw
。