如果我使用Handlebars作为Express 4的模板引擎,似乎只有指定单个布局模板的选项可用于所有视图:
app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));
如果您的应用需要多种布局,该怎么办?如果viewA.hbs
使用一种布局且viewB.hbs
需要不同的布局,该怎么办?
当我正在学习nodejs时,我来自PHP Laravel背景,其中Blade templating engine指定了在每个视图文件顶部使用的布局。这使得在任何给定视图的布局模板之间切换非常简单。
答案 0 :(得分:37)
当您调用render方法时,您应该能够从路由/控制器传递布局。
router.get('/', function(req, res) {
res.render('home', {layout: 'viewBLayout.hbs'});
});
我很确定jade会让你从模板内部切换布局,但我不知道你是否可以用把手做到这一点。
答案 1 :(得分:4)
答案 2 :(得分:0)
确保首先在/ 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'});
});