我想创建一个 nunjucks 模板来从目录动态加载 SVG,通过传递图标名称,模板应该使用 javascript 渲染 SVG 的内容
尝试过 {{% include
您没有提供您在何处(服务器端或浏览器中)使用nunjucks的任何信息,所以我认为它是一个浏览器。
您的目标是通过提供的网址将一些文件内容放置到页面上。可以通过自定义函数来解决:
{{ addIcon ('yourfile.svg') }}
。但有一个问题:默认情况下nunjucks
用于同步模式,而加载文件(fetch
)是异步操作。有3种方法可以解决。
var nunjucks = require('nunjucks');
var env = nunjucks.configure();
env.addFilter('addIcon', function(file) {
return `<div class = "runtime-icon" filename = '${file}'></div>`;
});
// With it you can call {{ addIcon('my.svg') }} in a template
// to add on a page `<div class = "runtime-icon" filename = 'my.svg'></div>`
...
function loadIcon (mutations) {
// scan page for a new element with runtime-icon-class
// get its filename-attribute
// fetch file
// replace div-element by the file content
}
const observer = new MutationObserver(loadIcon)
observer.observe(document, {childList: true, subtree: true})