Jonathan Smith
Jonathan Smith

Reputation: 2599

Nunjucks not rendering template

I have folder structure as follows:

/app
   |-routes.js
/public 
   |-index.html
server.js

Server.js looks like this:

var nunjucks = require('nunjucks');
var express        = require('express');
var app            = express();
nunjucks.configure('public', { autoescape: true, express: app });
var port = process.env.PORT || 8080; 
app.use(express.static(__dirname + '/public'));
require('./app/routes')(app); // configure our routes
app.listen(port);               
exports = module.exports = app;

app/routes.js looks like this:

module.exports = function(app) {
        app.get('*', function(req, res) {
            res.render('index.html', { awesome: 'page-title' }); 
        });
    };

public/index.html looks like this:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <base href="/">

    <title>{{awesome}}</title>

</head>
<body>
        <h1>{{ awesome }}</h1>    
    </div>
</body>
</html>

When I start up my node app and browse to localhost:8080, the page title is the string {{ awesome }} and the contains the string {{ awesome }} rather than the required "page-title". How come nunjucks is not rendering the variable into the template?

Upvotes: 4

Views: 5751

Answers (2)

杨强辉
杨强辉

Reputation: 1

if you use thinkjs on windows: your view.js should look like this:

export default {type: 'nunjucks',root_path: think.ROOT_PATH + '\\view',};

Upvotes: 0

Miroslav Mocek
Miroslav Mocek

Reputation: 867

You have to split 'public' folder. What is in public, cannot be processed by nunjucks. It's static (you declared it so). Put your nunjucks template in folder e.g. 'views'

/app
   |-routes.js
/public 
   |css/
   |img/
/views
   |- index.html
server.js

nunjucks.configure('views', ...)

Upvotes: 4

Related Questions