我正在尝试使用highlight.js为 nunjucks 设置语法突出显示过滤器。这似乎很容易做到。在我的 elevnety.js 文件中,我包括:
const hljs = require('highlight.js');
eleventyConfig.addFilter('highlight', function(txt) {
return hljs.highlightAuto(txt).value;
});
看起来 highlight.js 是一个安全的过滤器,并且会正确地转义它的内容并添加标记来控制突出显示,所以没有其他事情可做。
在我的 njk 页面中,我尝试将其与
{% filter highlight %}
<xmlstuff>
<myelements attr1="foo" />
</xmlsfuff>
{% endfilter %}
突出显示标记正在正确生成,但整个结果正在被转义(可能由 nunjucks 转义),因此生成的页面呈现所有标记代码。以下是添加到输出 html 页面的内容:
<span class="hljs-tag">&lt;<span class="hljs-name">xmlstuff</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">myelements</span> <span class="hljs-attr">attr1</span>=<span class="hljs-string">"foo"</span> /&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">xmlsfuff</span>&gt;</span>
我知道 nunjucks 有一个安全过滤器来防止这种情况发生,但我不知道如何应用它来说明我的过滤器块不需要转义,而且我在文档中找不到任何内容。我尝试了多种方法,但都失败了:
{% filter highlight | safe %}
<xmlstuff>
<myelements attr1="foo" />
</xmlsfuff>
{% endfilter %}
{% filter highlight %}
<xmlstuff>
<myelements attr1="foo" />
</xmlsfuff>
{% endfilter | safe %}
{{ {% filter highlight %}
<xmlstuff>
<myelements attr1="foo" />
</xmlsfuff>
{% endfilter %} | safe }}
有没有办法将此过滤器块标记为安全?