使用 Handlebars 和 ExpressJS 的多个布局?
Multiple layouts with Handlebars and ExpressJS?
如果我使用 Handlebars 作为 Express 4 的模板引擎,似乎只有一个选项可以指定一个布局模板用于所有视图:
app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));
如果您的应用需要多个布局怎么办?如果 viewA.hbs
使用一种布局而 viewB.hbs
需要不同的布局怎么办?
当我学习 nodejs 时,我来自 PHP Laravel 背景,其中 Blade templating engine 让你指定在每个视图文件的顶部使用哪个布局.它使得在任何给定视图的布局模板之间切换变得非常简单。
当您调用 render 方法时,您应该能够从 route/controller 传递布局。
router.get('/', function(req, res) {
res.render('home', {layout: 'viewBLayout.hbs'});
});
我很确定 jade 可以让您从模板内部切换布局,但我不知道您是否可以使用把手来做到这一点。
如果您使用 express-hbs,您可以在模板中使用如下注释指定布局:
{{!< layout}}
或者,您可以尝试 exphbs。还支持布局注释,可以嵌套多个布局。 (免责声明:我写的。)
确保您首先在 /layouts 目录中创建两个名为 "main.handlebars" 和 "backend.handlebars" 的文件:
例如,如果需要,请为两条路线尝试此代码
router.get('/', function(req, res) {
res.render('home', {layout: 'main'});
});
router.get('/backend', function(req, res) {
res.render('home', {layout: 'backend'});
});
如果我使用 Handlebars 作为 Express 4 的模板引擎,似乎只有一个选项可以指定一个布局模板用于所有视图:
app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));
如果您的应用需要多个布局怎么办?如果 viewA.hbs
使用一种布局而 viewB.hbs
需要不同的布局怎么办?
当我学习 nodejs 时,我来自 PHP Laravel 背景,其中 Blade templating engine 让你指定在每个视图文件的顶部使用哪个布局.它使得在任何给定视图的布局模板之间切换变得非常简单。
当您调用 render 方法时,您应该能够从 route/controller 传递布局。
router.get('/', function(req, res) {
res.render('home', {layout: 'viewBLayout.hbs'});
});
我很确定 jade 可以让您从模板内部切换布局,但我不知道您是否可以使用把手来做到这一点。
如果您使用 express-hbs,您可以在模板中使用如下注释指定布局:
{{!< layout}}
或者,您可以尝试 exphbs。还支持布局注释,可以嵌套多个布局。 (免责声明:我写的。)
确保您首先在 /layouts 目录中创建两个名为 "main.handlebars" 和 "backend.handlebars" 的文件:
例如,如果需要,请为两条路线尝试此代码
router.get('/', function(req, res) {
res.render('home', {layout: 'main'});
});
router.get('/backend', function(req, res) {
res.render('home', {layout: 'backend'});
});