答案:我发现data
没有传递给nunjucks模板。我在index.njk中将{{data.title}}
和{{data.sub}}
替换为{{title}}
和{{sub}}
,现在我的模板呈现了对象变量。谢谢antonmyrberg& petarr。
我正在尝试将一个对象传递给我的nunjucks模板,该对象位于res.render中,正在导出到快速路由器的模块中。当我访问路径时,index.njk呈现但不显示对象属性。
app.js
// -- Create express application --
const express = require('express');
const app = express();
// Require in Express Router
const router = require('./router');
// Require in Nunjucks and configure nujucks to install to Express
const nunjucks = require('nunjucks');
nunjucks.configure('views', {
express: app
});
// index page
app.use('/', router);
// -- Listen on port 3000 --
app.listen(3000, () => {
console.log('Listening on Port 3000');
});
路由器/ index.js
const express = require('express');
const router = express.Router();
let index = require('../modules/index.js');
router
.route('/')
.get(index.landing);
module.exports = router;
我使用app.js中的app.get运行相同的模板,传递路径并使用位于module.exports.landing中的相同代码,模板渲染时显示的对象中的变量。但我无法使用这种布局。
模块/ index.js
module.exports.landing = (req, res) => {
console.log('works');
let data = {
title: 'Nunjucks',
sub: 'Using nunjucks'
} ;
res.render('index.njk', data);
}
视图/ index.njk
<body>
<h1>{{data.title}}</h1>
<p>{{data.sub}}</p>
</body>
答案 0 :(得分:1)
Haven自己没有使用Nunjucks,但是我猜测并且说你误解了事情的运作方式。
let data = {
title: 'Nunjucks',
sub: 'Using nunjucks'
};
res.render('index.njk', data);
也可以通过返回匿名{}
来实现。
res.render('index.njk', {
title: 'Nunjucks',
sub: 'Using nunjucks'
});
您对data
的引用不会传递给模板,只会传递包含title
和sub
的对象。您是否尝试过引用{{title}}
和{{sub}}
?
答案 1 :(得分:1)
当您调用
时,在视图文件中调用局部变量时,您不需要该数据res.render('index.njk', data);
与
相同res.render('index.njk', {title: 'Nunjucks', sub: 'Using nunjucks'});
所以要回答你,试着在模板中写这个: ```
<body>
<h1>{{title}}</h1>
<p>{{sub}}</p>
</body>
```
答案 2 :(得分:0)
我发现data
没有传递给nunjucks模板。我在index.njk中将{{data.title}}
和{{data.sub}}
替换为{{title}}
和{{sub}}
,现在我的模板呈现了对象变量。