【问题标题】:How can I include/extend a jade file from the root of my template directory in express?如何从我的模板目录的根目录中包含/扩展一个玉文件?
【发布时间】:2012-10-06 00:17:32
【问题描述】:

给定一个示例结构:

/layout.jade
/really/deep/dir/inside/my/template/folder/example.jade

有什么方法可以在 example.jade 中扩展 layout.jade 而无需跟踪父目录的数量?

这按预期工作:

extends ../../../..etc../../../layout

但最好是这样做:

extends /layout

甚至是别名/硬链接并像这样使用它:

extends layout

同样假设有人知道一个解决方案,它也可以应用于包含吗?

【问题讨论】:

  • 遇到了同样的问题。最终使用了令人讨厌的“../../..”方法,但我很惊讶这还没有以更令人愉悦的方式处理。
  • @JoshPinter 在下面看到我的回答

标签: node.js express pug


【解决方案1】:

this particular commit 中引入了一项更改。

基本上,如果在 include 语句中找到的第一个字符是正斜杠并且定义了 basedir,它将在该路径中查找模板。

您必须先设置 Jade:

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.locals.basedir = app.get('views');

然后,从任何模板,无论嵌套多深,您都可以:

include /layout

【讨论】:

    【解决方案2】:

    查看代码本身后,我意识到有人不能简单地引用与模板根相关的jade文件。

    然而,一个简单的方法是修补jade/lib/parser.js 替换两个实例:

    , dir = dirname(this.filename);
    

    与:

    , dir = path.indexOf('/') ? dirname(this.filename) : this.options.settings.views;
    

    我不妨警告您,这没有经过足够的测试,并且不适合生产使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-18
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-02-19
      • 2015-01-31
      • 2013-05-03
      • 1970-01-01
      相关资源
      最近更新 更多