Nunjucks模板中嵌入JS变量无法正确求值的解决方案咨询
解决Nunjucks模板中JS变量与全局数组的条件判断问题
你的问题出在JS模板字符串拼接变量的方式和Nunjucks的上下文机制不匹配,导致变量没有被正确解析。下面是两种可行的解决办法:
方法一:通过Nunjucks渲染上下文传递变量(推荐)
不要用JS模板字符串的${major}硬编码到Nunjucks标签里,而是把JS变量直接传入Nunjucks的渲染上下文,让模板直接访问变量。这种方式是Nunjucks的标准用法,避免了拼接带来的各种问题。
示例代码:
const blockVersionTemplate = (major, minor, patch) => { const template = ` <div> {% if project.versionNeverReleased.indexOf(major) === -1 %} ...template code... {% endif %} </div> `; // 将project和JS变量一起传入Nunjucks上下文 return nunjucks.renderString(template, { project, major, minor, patch }); };
甚至可以用Nunjucks自带的in操作符简化判断,写法更直观:
{% if major not in project.versionNeverReleased %} ...template code... {% endif %}
方法二:修复JS模板字符串拼接的问题(不推荐)
如果一定要用模板字符串拼接,需要确保变量被正确替换,同时检查数据类型是否匹配:
- 确认传入的
major是字符串类型,如果是数字,先转成字符串(比如major.toString()); - 确认
project.versionNeverReleased在Nunjucks上下文中是数组,而非JSON字符串或其他类型; - 去掉不必要的转义引号,直接使用正常引号拼接:
const blockVersionTemplate = (major, minor, patch) => ` <div> {% if project.versionNeverReleased.indexOf("${major}") === -1 %} ...template code... {% endif %} </div> `;
内容的提问来源于stack exchange,提问作者davide
相关产品推荐
相关产品推荐

