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

如何将Jinja2循环变量绑定到JavaScript函数?求解决方案

解决Jinja2循环变量传递给JS函数的问题

方法一:直接传递JSON化的对象

你之前的问题出在给tojson结果加了单引号,导致传递的是字符串而非JS对象。正确的做法是去掉单引号,同时用safe过滤器确保Jinja不转义JSON的引号:

{% for project in projects.items %}
   <tr>
       <!-- 其他列保持不变 -->
       <td>
           <button type="button" id="project-{{ project.id }}" onclick="drawModal(this, {{ project | tojson | safe }})" class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#edit-modal">
               Edit
           </button>
       </td>
   </tr>
{% endfor %}

这样project会被转成合法的JS对象,drawModal函数里可以直接访问project.project_id等属性。

方法二:用data属性存储(推荐)

把数据存到按钮的data属性里,再通过JS事件监听获取,这种方式更符合HTML/JS分离的最佳实践:

HTML部分

{% for project in projects.items %}
   <tr>
       <!-- 其他列保持不变 -->
       <td>
           <button type="button" id="project-{{ project.id }}" data-project="{{ project | tojson | safe }}" class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#edit-modal">
               Edit
           </button>
       </td>
   </tr>
{% endfor %}

JS部分

// 监听所有带data-project属性的按钮点击
document.querySelectorAll('.btn-primary[data-project]').forEach(btn => {
    btn.addEventListener('click', function() {
        // 解析data属性里的JSON字符串为JS对象
        const project = JSON.parse(this.dataset.project);
        // 调用drawModal函数
        drawModal(this, project);
    });
});

为什么之前的尝试无效?

  • onclick="drawModal.bind(this, '{{ project | tojson }}')":单引号把JSON字符串包裹成了普通字符串,函数收到的是字符串而非对象,无法直接访问属性。
  • onclick="drawModal.bind(this,{{ project | safe }})":直接输出project的Python对象默认字符串表示,不是合法的JS对象,自然无法识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:06