使用Handlebars和ExpressJS的多种布局?

时间:2015-05-26 19:40:19

标签: node.js express template-engine handlebars.js

如果我使用Handlebars作为Express 4的模板引擎,似乎只有指定单个布局模板的选项可用于所有视图:

app.engine('hbs', expressHbs({extname:'hbs', defaultLayout:'layout.hbs'}));

如果您的应用需要多种布局,该怎么办?如果viewA.hbs使用一种布局且viewB.hbs需要不同的布局,该怎么办?

当我正在学习nodejs时,我来自PHP Laravel背景,其中Blade templating engine指定了在每个视图文件顶部使用的布局。这使得在任何给定视图的布局模板之间切换非常简单。

3 个答案:

答案 0 :(得分:37)

当您调用render方法时,您应该能够从路由/控制器传递布局。

router.get('/', function(req, res) {
    res.render('home', {layout: 'viewBLayout.hbs'});
});

我很确定jade会让你从模板内部切换布局,但我不知道你是否可以用把手做到这一点。

答案 1 :(得分:4)

如果您使用express-hbs,则可以在模板中使用以下注释指定布局:

{{!< layout}}

或者,您可以尝试exphbs。它还支持布局注释,并且可以嵌套多个布局。 (免责声明:我写了。)

答案 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'});
});