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

Nunjucks使用extends继承模板时如何向父模板传递变量?

解决方案

方法1:全局上下文传参(适用大部分场景)

你只需要在{% extends %}标签之前,通过{% set %}定义需要传递的变量即可。Nunjucks会按从上到下的顺序解析模板代码,先定义的变量会进入全局渲染上下文,继承的父模板可以直接读取这些变量。

index04.html 示例代码

{# 先定义要传给父模板的变量 #}
{% set pageTitle = "四级表单提交页" %}
{% set customClass = "form-page-04" %}
{% set hideFooterNav = true %}

{% extends "parts/layout.html" %}

{% block main %}
  {% include "forms/my-form04-content.htm" %}
{% endblock %}

layout.html 中直接调用变量即可

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>{{ pageTitle }}</title>
</head>
<body class="{{ customClass }}">
  <!-- 公共头部 -->
  {% block main %}{% endblock %}
  <!-- 仅当hideFooterNav不为true时显示底部导航 -->
  {% if not hideFooterNav %}
    <footer>公共底部导航</footer>
  {% endif %}
</body>
</html>

方法2:父模板专属传参(避免污染全局上下文)

如果你的变量只需要在父模板中使用,不想让子模板、include引入的模板也能读取到,可以在extends语句后用with参数传递变量,Nunjucks 3.0及以上版本支持该语法。

index04.html 示例代码

{% extends "parts/layout.html" with {
  pageTitle: "四级表单提交页",
  customClass: "form-page-04",
  hideFooterNav: true
} %}

{% block main %}
  {% include "forms/my-form04-content.htm" %}
{% endblock %}

如果加上only关键字,父模板将只能读取你通过with传递的变量,无法访问其他全局上下文变量:

{% extends "parts/layout.html" with {pageTitle: "四级表单提交页"} only %}

layout.html中访问变量的方式和方法1完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:45:02