【问题标题】:How do you dynamically set a layout for a Jade template to extend in Node.js/Express 3.0?如何动态设置 Jade 模板的布局以在 Node.js/Express 3.0 中扩展?
【发布时间】:2012-06-29 08:35:30
【问题描述】:

我有 3 个文件:layoutA.jade、layoutB.jade 和 index.jade。如何以编程方式设置 index.jade 将扩展的布局?

我尝试过使用:

app.set('view options', { layout: false });

与:

res.render('index', { title: 'Express', layout: 'layoutB' });  // older 2.x way?

我似乎无法覆盖 index.jade 文件中明确设置的任何内容。省略 index.jade 文件中的 extends 行也不起作用。

【问题讨论】:

    标签: node.js express pug


    【解决方案1】:

    假设玉文件在以下目录中:

    + views
      + shared
        - layoutA.jade
        - layoutB.jade
      + home
        - index.jade
    

    按正确顺序添加布局设置,并指定根视图文件夹:

    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.set('view options', { layout: 'shared/layoutA' });
    

    确保您指定了正确的文件夹(在本例中为“views”)。还要确保指定有效的默认布局。在深入研究之前检查这是否适用于测试页面。

    一旦这样你就可以使用默认布局了:

    if(someImportantVar) {
      res.render('home/index', { title: 'Different layout!', layout: 'shared/layoutB' });
    } else {
      res.render('home/index', { title: 'Default layout!'});
    }
    

    【讨论】:

    • 如果我错了,请纠正我,但这个解决方案不再正确,是吗?
    • @AugustinRiedinger 根据问题标题,Express 3.0 应该是正确的。它在那个版本中不起作用吗?
    • 我认为express 3 与当前express 4.x 之间不会存在兼容性问题,但在玉方面:使用pug 2.0,我可以看出view options 参数不是不再使用(或者我很乐意出错)。经过大量搜索以在jade/pug中实现动态布局但没有成功,所以这个答案让我感到沮丧,尽管没有错。
    猜你喜欢
    • 2013-08-03
    • 2013-11-16
    • 2012-01-05
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2015-06-26
    相关资源
    最近更新 更多