如何将 HTML 呈现给变量

How to render HTML to a variable

我需要呈现包含内容的 HTML 元素列表并将其放入变量中。我怎样才能在树枝中高效地做到这一点?

例如我需要呈现订单中的 post 跟踪 URL,该订单可能有多个运输/包裹。

{% for delivery in order.deliveries %} 
{% for trackingCode in delivery.getTrackingCodes() %}
    <a href="{{ delivery.shippingMethod.trackingUrl|replace({"%s":trackingCode}|raw) }}">{{ trackingCode }}</a><br/>
{% endfor %}
{% endfor %}

与其将其直接打印到输出中,我更喜欢先将渲染后的输出放入一个变量中,例如

 {% set output = ... %}
 ...
 {{ output }}

如何在 twig 中执行此操作?

只需将 html 连接到 output 变量。请记住,您需要在 for 循环外定义变量,以便在循环外使用它。

{% set foo = '' %}

{% for i in 1..10 %}
    {% set foo = foo ~ '<a href="#">'~i~'</a>' %}
{% endfor %}

{{ foo|raw }}

demo

经过长时间的搜索,我找到了一种更好更有效的方法

您可以将 {% set var %}{% endset %} 一起用作整个输出块。意味着整个输出将被设置为变量。这使生活变得更加轻松和可读。 例如

{% set trackingText %}
    {% for delivery in order.deliveries %} 
    {% for trackingCode in delivery.getTrackingCodes() %}
    <a href="{{ delivery.shippingMethod.trackingUrl|replace({"%s":trackingCode}|raw) }}">{{ trackingCode }}</a><br/>
    {% endfor %}
    {% endfor %}
{% endset %}
...
{% if trackingText|trim is not empty %} 
    You can track the delivery by using the following URL:<br/>
    {{ trackingText }}
    <br/>
{% endif %}