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
相关产品推荐
相关产品推荐

