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

模板继承:如何实现父模板向子模板传递数据(通用HTML表格场景)

如何在Jinja2模板继承中传递循环上下文到子模板?

哎,其实你已经离成功只差一步啦!Jinja2的模板继承机制里,子模板的块是直接共享父模板当前渲染上下文的——也就是说,父模板循环里的elt变量,在子模板的table_td块里是可以直接访问的,根本不需要额外传递!

先修正父模板的小笔误

你父模板里写的el.value应该是elt.value(循环变量是elt),先调整一下generic_table.html:

<table class="table">
  <tbody>
    {% for elt in table %}
      <tr>
        {% block table_td %}
          <td>{{ elt.value }}</td>
        {% endblock %}
      </tr>
    {% endfor %}
  </tbody>
</table>

子模板直接使用循环变量

接下来在子模板里,你可以直接用elt来获取当前行的ID或者其他字段,比如给按钮加上对应ID:

{% extends "generic_table.html" %}

{% block table_td %}
  {{ super() }} <!-- 保留父模板的原有列 -->
  <td>
    <button>编辑 #{{ elt.id }}</button>
  </td>
  <td>
    <button>删除 #{{ elt.id }}</button>
  </td>
{% endblock table_td %}

原理说明

Jinja2的块不是孤立执行的,它会嵌入到父模板的渲染流程中。当父模板循环到某一个elt时,子模板的table_td块会在这个循环的上下文里运行,所以elt这个变量完全是可用的——就像你在父模板的循环里直接写代码一样。

如果之后你需要传递更多自定义变量,也可以在父模板的循环里用{% set %}声明变量,子模板同样能直接访问到这些变量哦。

内容的提问来源于stack exchange,提问作者Théo Le

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:27:36