Nunjucks 导入模板并传入特定数据,如 twig "with" 关键字
Nunjucks import template and pass in specific data like the twig "with" keyword
https://mozilla.github.io/nunjucks/templating.html#include
我希望能够将数据传递到包含的模板。
Nunjucks 与 Twig 非常相似,当然是基于 Ninja..
在 twig 中可以导入一个 tpl 并传入数据:https://twig.symfony.com/doc/2.x/tags/include.html
我真的需要能够在带有 nunjucks 的 nodejs 项目中执行此操作,这可能吗?
最简单的方法是定义自定义过滤器render
。
它接受模板名称作为过滤值和数据作为参数:
{{ 'some-template-name' | render(data) }}
.
/views
test.html
test2.html
app.js
//app.js
const nunjucks = require('nunjucks');
var env = new nunjucks.Environment(new nunjucks.FileSystemLoader('views'));
env.addFilter('render', function (template, ctx) {
try {
return env.filters.safe(env.render(template, ctx));
} catch (err) {
return err.message;
}
});
var html = env.render('test.html', {a: '100'});
console.log(html);
// test.html
TEST {{a}}
{{ 'test2.html' | render({b: 200}) }}
// test2.html
TEST2 {{b}}
您也可以 define own tags(扩展名),例如{% mytag = "/some-template-path", {data} %}
P.S。异步版本
env.addFilter('render', function (template, ctx, cb) {
try {
env.render(template, ctx, (err, html) => cb(err, !err ? env.filters.safe(html) : undefined))
} catch (err) {
console.error('Render error', err.message);
console.error(template, ctx);
cb(err);
}
}, true);
https://mozilla.github.io/nunjucks/templating.html#include
我希望能够将数据传递到包含的模板。
Nunjucks 与 Twig 非常相似,当然是基于 Ninja..
在 twig 中可以导入一个 tpl 并传入数据:https://twig.symfony.com/doc/2.x/tags/include.html
我真的需要能够在带有 nunjucks 的 nodejs 项目中执行此操作,这可能吗?
最简单的方法是定义自定义过滤器render
。
它接受模板名称作为过滤值和数据作为参数:
{{ 'some-template-name' | render(data) }}
.
/views
test.html
test2.html
app.js
//app.js
const nunjucks = require('nunjucks');
var env = new nunjucks.Environment(new nunjucks.FileSystemLoader('views'));
env.addFilter('render', function (template, ctx) {
try {
return env.filters.safe(env.render(template, ctx));
} catch (err) {
return err.message;
}
});
var html = env.render('test.html', {a: '100'});
console.log(html);
// test.html
TEST {{a}}
{{ 'test2.html' | render({b: 200}) }}
// test2.html
TEST2 {{b}}
您也可以 define own tags(扩展名),例如{% mytag = "/some-template-path", {data} %}
P.S。异步版本
env.addFilter('render', function (template, ctx, cb) {
try {
env.render(template, ctx, (err, html) => cb(err, !err ? env.filters.safe(html) : undefined))
} catch (err) {
console.error('Render error', err.message);
console.error(template, ctx);
cb(err);
}
}, true);