我设法解决了这个问题。至少我通过更改几行得到了我想要的。
该解决方案本质上所做的是将locals
参数从renderFile
函数传递给compileFile
函数,如下所示:
this.renderFile = function (pathName, locals, cb) {
if (cb) {
exports.compileFile(pathName, locals, function (err, fn) {
if (err) {
cb(err);
return;
}
cb(null, fn(locals));
});
return;
}
return exports.compileFile(pathName, locals)(locals);
};
这发生在文件的行514
和行524
上/lib/swig.js
。当地人基本上变成options
然后我只405
在同一个文件的行中添加了这个
if(options.layout)
parentName = options.layout;
在 express 的路由定义中调用 res.render 命令时,我只是添加了一个带有布局相对位置的布局选项。
res.render('index', { title: 'Express', layout: 'layouts/main.layout' });
这完全解决了我的问题。保持正常{% extend %}
功能(当不使用选项覆盖它时layout
),同时能够动态设置布局。
唯一的缺点是它layout
变成了一个保留选项,我认为你可以将它重构为不是问题。
希望这可以帮助某人。两行更改和两行代码使我可以进行动态布局。性能是一样的。