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
文件
我试图让dodirectory=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()