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

如何在Django模板中向include传递extends中的块变量?

解决方案

方案一:利用块内容赋值给模板变量(推荐)

修改main.html,将块的内容捕获到变量中,再传递给include的模板:

<html>
<body>
  {% block title %}default title{% endblock %}
  <!-- 将块内容赋值给变量 -->
  {% with page_title=block.title %}
  <p>
    This works: {{ page_title }}
  </p>

  {% include 'heading.html' with title=page_title %}
  {% endwith %}
</body>
</html>

page.html保持原有写法即可:

{% extends 'main.html' %}

{% block title %}test title{% endblock %}

渲染时,block.title会获取到子模板中覆盖的test title,赋值给page_title后就能传递给heading.html,同时页面显示的标题也保持一致。

方案二:子模板中定义变量+块关联

如果觉得方案一的写法有点绕,可以在子模板里先定义变量,再让块引用这个变量,父模板直接使用变量传递:

page.html修改为:

{% extends 'main.html' %}

<!-- 定义变量 -->
{% with page_title="test title" %}
{% block title %}{{ page_title }}{% endblock %}
{% endwith %}

main.html调整为:

<html>
<body>
  <p>
    This works: {% block title %}{% endblock %}
  </p>

  <!-- 直接使用子模板定义的变量 -->
  {% include 'heading.html' with title=page_title %}
</body>
</html>

这种方式逻辑更直观,子模板里的变量和块关联,避免重复写标题内容。

方案三:将include嵌入块中(适合简单场景)

如果heading.html只用于展示标题,可以直接把include放到title块里,但这种方式会让块的职责更模糊,适合结构简单的场景:

main.html修改为:

<html>
<body>
  <p>
    This works: {% block title %}{% endblock %}
  </p>

  {% block heading %}
    {% include 'heading.html' with title=block.super %}
  {% endblock %}
</body>
</html>

page.html保持不变,渲染时block.super会获取到title块的内容传递给heading.html。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:10:31