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

如何在Django模板的for循环中生成唯一ID?

在Django模板for循环中生成唯一ID的解决方案

没问题,这在Django模板里非常容易实现,咱们直接利用模板内置的forloop变量就能搞定你的需求。

修改后的代码示例

{% for form in formset.forms %}
  <tr>
    {% for field in form %}
      <td class="input_td{% if field.errors %} error_td{% endif %}">
        <!-- 用外层循环的计数生成唯一ID,同时优化name属性适配formset -->
        <select name="{{ form.prefix }}-city" id="city-{{ forloop.parentloop.counter }}"></select>
      </td>
    {% endfor %}
    <td class="delete_formset_td"></td>
  </tr>
{% endfor %}

关键细节解释

  • forloop.parentloop.counter:因为你是嵌套的for循环(外层遍历formset的表单,内层遍历单个表单的字段),所以需要用parentloop来获取外层循环的计数器。它会从1开始递增,正好生成city-1、city-2、city-3这类唯一ID。如果需要从0开始计数,换成forloop.parentloop.counter0即可。
  • form.prefix:这是FormSet自动为每个表单生成的前缀(比如form-0、form-1),把它加到name属性里能保证每个select的提交字段名唯一,避免表单提交时出现字段冲突的问题,符合Django FormSet的规范。

如果你的select是绑定到form中的某个特定字段,其实更推荐直接用Django表单字段的渲染方式(比如{{ form.city }}),然后通过自定义widget来设置动态ID,不过上面的方案完全适配你当前手动写select的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:27:48