使用Nunjucks时11ty为何仍转义HTML代码?已用safe过滤器
问题排查与解决步骤
确认index.html的模板引擎配置
在index.html的front matter中明确指定使用Nunjucks引擎,避免11ty因默认规则选择其他引擎(如Liquid)导致转义逻辑不符:--- layout: base templateEngineOverride: njk ---检查内容写入方式
若index.html中的HTML代码是直接写在模板内的,不要将其字符串化(比如用引号包裹),直接写入原生HTML代码即可,避免额外转义。验证layout中的safe过滤器
确认base.html里的{{ content | safe }}写法无误:过滤器管道符|前后无多余空格,safe拼写正确,没有被其他语法打断。排查全局自动转义配置(仅用于验证)
若上述方法无效,可临时在.eleventy.js中关闭Nunjucks全局自动转义,确认是否是全局配置导致的问题:module.exports = function(eleventyConfig) { eleventyConfig.setNunjucksEnvironmentOptions({ autoescape: false }); };注意:全局关闭自动转义存在安全风险,验证完成后建议恢复默认,改用局部
safe过滤器处理特定内容。处理外部数据来源的内容
若index.html的HTML内容来自front matter变量或外部数据文件,需要在引用该变量时直接添加safe过滤器,而非仅依赖layout中的content过滤器。例如:{{ page.data.customHtml | safe }}
内容的提问来源于stack exchange,提问作者Keita Yokoyama
相关产品推荐
相关产品推荐

