html 使用 express router 时渲染不显示 nunjucks 变量
html rendering not displaying nunjucks variables when using express router
答案:我发现 data
没有传递到 nunjucks 模板。我在 index.njk 中用 {{title}}
和 {{sub}}
替换了 {{data.title}}
和 {{data.sub}}
,现在我的模板呈现了对象变量。感谢 antonmyrberg 和 petarr。
我正在尝试将一个对象传递到我的 nunjucks 模板,该对象位于 res.render 正在导出到 express 路由器的模块中。当我访问路线时,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');
});
router/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中的相同代码,显示对象中的变量模板呈现时。但是我无法使用此布局。
modules/index.js
module.exports.landing = (req, res) => {
console.log('works');
let data = {
title: 'Nunjucks',
sub: 'Using nunjucks'
} ;
res.render('index.njk', data);
}
views/index.njk
<body>
<h1>{{data.title}}</h1>
<p>{{data.sub}}</p>
</body>
我自己没有使用过 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}}
?
在视图文件中调用局部变量时不需要该数据,当您调用
res.render('index.njk', data);
与
相同
res.render('index.njk', {title: 'Nunjucks', sub: 'Using nunjucks'});
所以为了回答你,试着在模板中写这个:
```
<body>
<h1>{{title}}</h1>
<p>{{sub}}</p>
</body>
```
我发现 data
没有传递给 nunjucks 模板。我在 index.njk 中用 {{title}}
和 {{sub}}
替换了 {{data.title}}
和 {{data.sub}}
,现在我的模板呈现了对象变量。
答案:我发现 data
没有传递到 nunjucks 模板。我在 index.njk 中用 {{title}}
和 {{sub}}
替换了 {{data.title}}
和 {{data.sub}}
,现在我的模板呈现了对象变量。感谢 antonmyrberg 和 petarr。
我正在尝试将一个对象传递到我的 nunjucks 模板,该对象位于 res.render 正在导出到 express 路由器的模块中。当我访问路线时,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');
});
router/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中的相同代码,显示对象中的变量模板呈现时。但是我无法使用此布局。
modules/index.js
module.exports.landing = (req, res) => {
console.log('works');
let data = {
title: 'Nunjucks',
sub: 'Using nunjucks'
} ;
res.render('index.njk', data);
}
views/index.njk
<body>
<h1>{{data.title}}</h1>
<p>{{data.sub}}</p>
</body>
我自己没有使用过 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}}
?
在视图文件中调用局部变量时不需要该数据,当您调用
res.render('index.njk', data);
与
相同res.render('index.njk', {title: 'Nunjucks', sub: 'Using nunjucks'});
所以为了回答你,试着在模板中写这个: ```
<body>
<h1>{{title}}</h1>
<p>{{sub}}</p>
</body>
```
我发现 data
没有传递给 nunjucks 模板。我在 index.njk 中用 {{title}}
和 {{sub}}
替换了 {{data.title}}
和 {{data.sub}}
,现在我的模板呈现了对象变量。