You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Twig中编写循环实现动态变量赋值与Token字符串拼接?

解决Twig模板中评审人字段的DRY重构问题

你遇到的核心问题是动态Token字符串拼接和变量处理的写法错误,下面直接给你正确的实现方案:

原重复代码示例(不符合DRY)

{% set reviewer_0 = webform_token('[webform_submission:values:reviewer_0]', webform_submission) %}
{% if reviewer_0 %}
  <div>{{ reviewer_0 }}</div>
{% endif %}

{% set reviewer_1 = webform_token('[webform_submission:values:reviewer_1]', webform_submission) %}
{% if reviewer_1 %}
  <div>{{ reviewer_1 }}</div>
{% endif %}

{% set reviewer_2 = webform_token('[webform_submission:values:reviewer_2]', webform_submission) %}
{% if reviewer_2 %}
  <div>{{ reviewer_2 }}</div>
{% endif %}

错误循环写法(问题出在动态变量名和Token拼接)

{# 错误:这里的reviewer_i是固定变量名,不是动态生成的reviewer_0/1/2 #}
{% for i in 0..2 %}
  {% set reviewer_i = webform_token('[webform_submission:values:reviewer_' ~ i ~ ']', webform_submission) %}
  {% if reviewer_i %}
    <div>{{ reviewer_i }}</div>
  {% endif %}
{% endfor %}

正确的循环实现

方案1:基于webform_token的写法

直接在循环内拼接Token字符串,用临时变量存储当前评审人值即可,不需要动态变量名:

{% for i in 0..2 %}
  {% set reviewer = webform_token('[webform_submission:values:reviewer_' ~ i ~ ']', webform_submission) %}
  {% if reviewer %}
    <div>{{ reviewer }}</div>
  {% endif %}
{% endfor %}

方案2:直接访问提交数据(更高效)

如果可以直接访问webform_submission的values属性,跳过token解析会更高效:

{% for i in 0..2 %}
  {# 使用空合并运算符处理字段不存在的情况 #}
  {% set reviewer = webform_submission.values['reviewer_' ~ i] ?? null %}
  {% if reviewer %}
    <div>{{ reviewer }}</div>
  {% endif %}
{% endfor %}

关键说明

你之前的错误在于试图创建reviewer_0这类带索引的动态变量名,但Twig中reviewer_i会被识别为固定变量名,而非动态生成的名称。实际上完全不需要这类命名的变量,循环内的临时变量reviewer在每次迭代中都会存储当前索引对应的值,既简洁又符合DRY原则。

内容的提问来源于stack exchange,提问作者esod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:42:41