View 动态加载jade模板

View 动态加载jade模板,view,include,express,pug,View,Include,Express,Pug,我在一个小型文档网站上工作,内容存储在文件中。例如,我在module1/目录中有两个文件chapter1.jade和chapter2.jade 我想阅读module1/目录,并在其中动态包含所有chapterX.jade文件 我试图让dodirectory=fs.readDirSync('module1/')在我看来: each item in directory include item 但是jade include不支持动态值(甚至“include#{item}”)也不起作用。你知道我

我在一个小型文档网站上工作,内容存储在文件中。例如,我在
module1/
目录中有两个文件
chapter1.jade
chapter2.jade

我想阅读
module1/
目录,并在其中动态包含所有
chapterX.jade
文件

我试图让do
directory=fs.readDirSync('module1/')
在我看来:

each item in directory
  include item
但是jade include不支持动态值(甚至“include#{item}”)也不起作用。你知道我该怎么做吗

编辑:我想在
每个
循环下生成一些代码(锚定以便于链接),这样解决方案就更容易出现在视图中。显然,我可以在包含的文件中手动添加锚,但这并不理想


正如@user1737909所说的,这是不可能只使用jade的

实现这一点的最佳方法(tho)是构建一个小的Express Dynamic(view)Helpers

依赖于EXPRESS 3.XX


检查这些:

以下是我为使其正常工作所做工作的简短版本。它使用

var目录=uu dirname+'/views/bla/'
,档案
,renderedHTML='';
如果(!fs.existsSync(目录)){
//目录不存在,在我的情况下,我想要一个404
返回res.status(404.send('404未找到');
}
//获取目录中的文件
files=fs.readdirSync(目录);
forEach(函数(文件){
var template=jade.compile(fs.readFileSync(目录+文件,'utf8'));
//一些模板
renderedHTML++=''+模板()++'';
});
//渲染实际视图并将预渲染视图传递给它
res.render('视图',{
标题:“视图”,
档案:档案,
html:renderedHTML
})
而视图只是将html变量呈现为未缩放:

div(class=“组件文档包装”)
!{html}

除了kalemas answer,您还可以将您的Include写入jade中包含的文件

在本例中,我将我的include写入include_all.jade。此文件包含在jade文件中

如果不起作用,请检查路径;-)

e、 g。 在你的app.js中

var includes = "path/to/include1\n";
includes += "path/to/include2";
...
incPath = "path/to/include_all.jade";

fs.open(incPath,'w',function(err,fd){
if(err){
    throw 'error open file: ' + incPath +" "+ err;
}

var buffer = new Buffer(includes);
 fs.write(fd,buffer,0,buffer.length,null,function(err){
    if (err) 
        throw 'error writing file: ' +err;
    fs.close(fd,function(){
        console.log('file written ' + incPath);
    });
 });
});
在你的档案里

include path/to/include_all.jade

我在询问之前做了调查,看到了这篇文章。尽管指向文档的链接已经失效,而且看起来动态助手是版本2的一项功能。我使用的是最新的Express 3.yep,动态包含被删除,那么我们就倒霉了@kalema。不完全是。我只是想用jade自己来进行某种缓存控制,我觉得我对Express/jade很陌生,你能给我举个例子吗?谢谢对于每个文件数组,使用jade.renderFile()将其附加到字符串中,并渲染该字符串感谢您指出了方向。Jade公共API已更改:Jade.renderFile()现在是Jade.compile()