Spe*_*age 51 node.js express pug
我正在使用Jade和Express,我想在include语句中使用变量.例如:
app.js
app.get('/admin', function (req, res) {
var Admin = require('./routes/admin/app').Admin;
res.render(Admin.view, {
title: 'Admin',
page: 'admin'
});
});
Run Code Online (Sandbox Code Playgroud)
layout.jade
- var templates = page + '/templates/'
include templates
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我得到了错误 EBADF, Bad file descriptor 'templates.jade'
我甚至试过了
include #{templates}
Run Code Online (Sandbox Code Playgroud)
无济于事.
fre*_*ish 42
AFAIK JADE不支持动态包括.我建议在模板外"包括",即
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
});
});
});
Run Code Online (Sandbox Code Playgroud)
layout.jade
|!{ html }
Run Code Online (Sandbox Code Playgroud)
ant*_*paw 19
这也有效:
//controller
var jade = require('jade');
res.render('show', {templateRender: jade.renderFile});
//template
!= templateRender('my/path/'+dynamic+'.jade', options)
Run Code Online (Sandbox Code Playgroud)
这可能不会提高您使用"视图缓存"设置所期望的性能(默认情况下,它在NODE_ENV ==='production'中打开).甚至打破应用程序(例如,如果在部署新代码时文件在硬盘驱动器上不可用).在客户端或同构应用程序中尝试使用此技巧也无法正常工作,因为无法编译模板.
找到这个页面谷歌搜索相同的问题,但在不同的背景下,所以我想我的解决方案(阅读:解决方法)在这里为后代:
我想用变量中的更多上下文来包围我的include,例如(简化):
- var templates = page + '/templates/'
- var headid = page + 'head'
- var imgsrc = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
div(id=page)
include templates
Run Code Online (Sandbox Code Playgroud)
由于这不起作用(Jade不支持动态包含,如怪异所指出的),我与mixin混合:
(编辑 - 比我之前的解决方案更优雅:)
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 = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
div(id=page)
+page
Run Code Online (Sandbox Code Playgroud)
我以前的回答:
mixin templates(page)
- var headid = page + 'head'
- var imgsrc = '/images/' + page
div(id=headid)
h1 #{page}
img(src=imgsrc)
+templates('page1')
#page1
include page1/templates/
+templates('page2')
#page2
include page2/templates/
...
Run Code Online (Sandbox Code Playgroud)
它并不优雅,如果您需要以这种方式包含多个东西,它将无法工作,但至少部分Jade是动态的.
| 归档时间: |
|
| 查看次数: |
33584 次 |
| 最近记录: |