Директива расширения Nunjucks не работает с шаблоном в отдельном каталоге, используя экспресс?

Я настраиваю шаблоны nunjucks с помощью своего экспресс-приложения, ниже приведена моя структура каталогов для проекта.

. nunjucks-project
  |__ api
  |__ node_modules
  |__ views
     |__ templates
        |__ layouts
           |__ default.html  
        |__ pages
           |__ home.html
        |__ partials
           |__ header.html
           |__ footer.html

Вот мой app.js:

/**
 *  Author Kailash K Yogeshwar 2016
 */

var express  = require('express');
var nunjucks = require('nunjucks');
var mongoose = require('mongoose');
var path     = require('path');
var config   = require('config');

var app               =  express();
var viewRoutes  =  require("./routes/viewroutes/index");
var apiRoutes   =  require("./routes/apiroutes/index");


var dbUrl = "mongodb://localhost:27017/techblogs";

mongoose.connect(dbUrl);

mongoose.connection.on('open',() => {
    console.log("Connection successfully established")
});

mongoose.connection.on("error",(err) => {
    console.error(err);
});

//configure views
app.set('views', path.join(__dirname, "views", "templates"));
app.set('view engine', 'html');


// configure nunjucks
var env = nunjucks.configure(app.get('views'), {
    autoescape: true,
    dev: true,
    noCache: true,
    throwOnUndefined: true,
    express : app
});

console.log(JSON.stringify(env, null, 3))

app.use('/', viewRoutes);
app.use('/api', apiRoutes);

app.listen(process.env.PORT || 8080, () => {
    console.log("Server Started to listen on ",process.env.PORT || 8080);
});


module.exports = app;

Вот мой default.html, home.html:

!<!DOCTYPE html>
<html>
<head>
    <title>{{title}}</title>
</head>
<body>
    {% include 'partials/header.html' %}
    {% block content %} {% endblock %}
    {% include 'partials/footer.html' %}
</body>
</html>

home.html

{% extends "layouts/default.html" %}
{% block content %}
<h1> I am home page <h1>
{% endblock %}

Я предполагаю, что расширение работает только в том случае, если шаблон находится в том же каталоге, а не в отдельном каталоге, также я пытался указать несколько путей в nunjucks.configure([paths],{}), но это работает, поскольку учитывает только первый путь. все пути добавляются как относительные пути.

Скриншот :

Шаблон не найден


person kailash yogeshwar    schedule 09.11.2016    source источник
comment
Вам не хватает кавычек {% include 'partials/header.html' %} :)   -  person Aikon Mogwai    schedule 09.11.2016
comment
Ошибка связана не с заголовком нашего нижнего колонтитула, а с default.html   -  person kailash yogeshwar    schedule 10.11.2016
comment
sgeproject.narod.ru/node/nun3.zip Обрезанный пример работает нормально.   -  person Aikon Mogwai    schedule 10.11.2016
comment
@AikonMogwai, который работает, когда вы определяете весь свой маршрут в index.js, но не работает, если маршрут находится в отдельном каталоге   -  person kailash yogeshwar    schedule 10.11.2016
comment
@AikonMogwai я нашел решение этой проблемы, см. ниже   -  person kailash yogeshwar    schedule 10.11.2016


Ответы (1)


Для любого, кто столкнулся с подобной проблемой, я просто переместил свое промежуточное ПО viewRoute ниже, экспортировал экземпляр экспресс-приложения и использовал экземпляр в промежуточном ПО для рендеринга.

var env = nunjucks.configure(app.get('views'), options);

var viewRoutes  =  require("./routes/viewroutes/index");
var apiRoutes   =  require("./routes/apiroutes/index");

app.use('/', viewRoutes);
app.use('/api', apiRoutes);

app.listen(process.env.PORT || 8080, () => {
    console.log("Server Started to listen on ",process.env.PORT || 8080);
});

и мой viewRoutes/index.js

var express = require('express');
var nunjucks = require('nunjucks');
var app = require("../../index");

var router = express.Router();

app.get("/", function(req, res, next){
    res.render('pages/home.html',{
        title: "Home"
    });
})

module.exports = router;
person kailash yogeshwar    schedule 10.11.2016