首页 > 解决方案 > Jinja2在没有命名空间的循环外设置变量字符串

问题描述

我正在尝试从循环中创建一个连接字符串,然后将其设置为一个变量,然后我可以在循环外使用。我无权访问命名空间我使用的是旧版本的 Jinja2。

到目前为止,这是我要说明的内容...

    {% set ab_cart_string = '' %}
    {% for item in cart_object %}

    VariantID = {{ item.variant_id }}
    Item Count = {{ item.quantity }}
    {% set ab_cart_string = ab_cart_string ~ item.variant_id ~ ':' ~ item.quantity ~ ',' %}
    String = {{ ab_cart_string }}

    {% endfor %}

    Url = {{ ab_cart_string|slice(0, -1) }}

预期输出:

字符串 = 27707915206755:1,28410722943075:1,

网址 = 27707915206755:1,28410722943075:1

实际输出:

字符串 = 27707915206755:1,28410722943075:1,

网址 =

标签: loopsscopejinja2shopify

解决方案


我没有在循环外访问变量,而是在标签内构建了字符串,因为目标是构建链接。

在这里,我循环遍历 products 对象,并通过每个索引添加一个 variant.id 和一个数量,以便在 Shopify 中手动构建购物车链接,其中包含用户最后添加的项目。

然后,当循环中有多个项目时,如果不是最后一个循环,我添加了一个条件,我们需要在索引之间添加一个逗号。通过这种方式,我能够根据永久链接正确构建链接,以便在 Shopify 中预加载购物车。

<a href="https://{{ event.domain }}/cart/
{%- set products = cart_object -%} 
{%- for product in products -%} 
    {{- product.variant_id -}}:{{- product.quantity -}}
    {%- if not loop.last -%},{%- endif -%}
{%- endfor -%}  
">CART LINK HERE</a>

推荐阅读