В экспресс-приложении hogan-express node.js, как я могу использовать шаблон, отличный от глобального шаблона, на определенных маршрутах?

Итак, я новичок в экспрессии, шаблонах и бэкэндах. Я искал весь день, чтобы ответить на этот вопрос, но безрезультатно. Вот и подумал, что спрошу здесь.

Как вы можете использовать другой шаблон для определенных маршрутов, отличный от глобального шаблона, объявленного в hogan-express, node.js, экспресс приложение? Я все еще хотел бы использовать партиалы, так что имейте это в виду, если вы рекомендуете мне попробовать другой фреймворк или что-то в этом роде. (хотя не уверен, насколько распространены частичные...)

Код

Вот код, который я просмотрел для Hogan-express из самих документов (он был преобразован из кофескрипта в обычный javascript).

var express = require('express');

var app = express();

// start example code from docs.  
// I use code like this in my app.js/server.js file

app.set('view engine', 'html');

app.set('layout', 'layout'); // the global template as I explained above.

app.set('partials', {
  foo: 'foo'
});

app.enable('view cache');

app.engine('html', require('hogan-express'));

// I have this function referenced from a different file...
// in my code I'll explain below.

app.get('/', function(req, res) {
  res.locals = {
    name: 'Andrew'
  };
  return res.render('template', {
    partials: {
      message: 'message'
    }
  });
});

мой код отличается следующим образом

// in---file---> 'app.js'

var routes = require('./routes/index.js');

app.get('/', routes.index);

// ---in---file---> '/routes/index.js'

exports.index =  function(req,res){

    var template_data = {
        posts : blogposts, 
        currentUser : req.user
    };

    res.render('index.html', template_data);  
};

person John    schedule 22.04.2014    source источник


Ответы (1)


вы можете просто добавить layout:'layout2' к вашему объекту template_data, который отправляется в качестве второго параметра в res.render.

// in---file---> 'app.js'

var routes = require('./routes/index.js');

app.get('/', routes.index);

// ---in---file---> '/routes/index.js'

exports.index =  function(req,res){

    var template_data = {
        layout:'layout2', // this is the important addition.
        posts : blogposts, 
        currentUser : req.user
    };

    res.render('index.html', template_data);  
};

Новый макет будет работать для каждого маршрута, в котором вы его объявили, но не перезапишет глобальный шаблон для других маршрутов, не объявленных таким образом.

person John    schedule 22.04.2014