Использование интерполяции в Node.js EJS включает

Мое приложение Express использует EJS, и мой каталог представлений выглядит так:

./views
 ./contents
    home.ejs
 ./includes
    header.ejs
    footer.ejs
  layout.ejs

Я пытаюсь загрузить home.ejs в моем представлении layout.ejs условно на основе локальной переменной с именем contentsв моих маршрутах/index.js. Этот файл выглядит так:

/*
 * GET home page.
 */

exports.index = function(req, res){
  res.render('index', { title: 'Home', contents: 'home.ejs' });
};

В идеале я мог бы просто написать (в layout.ejs):

<% include '/contents' + contents %>

где завершающее «содержимое» — это локальная переменная, которая содержит относительный путь к основному тексту для загрузки.

Но, увы, оказывается, что EJS всегда буквально интерпретирует текст, следующий за директивой include, и никакой магии интерполяции не происходит.

Я тоже пытался, но безрезультатно:

<% function yieldContent(contents){ %>
  <% var contentPath = 'contents/' + contents; %>
  <% include contentPath %>
<% }; %>
<% loadContent(); %>

Есть ли у кого-нибудь творческое решение для условного включения представления на основе переменной, переданной в маршрутах?

15
задан bottles 3 August 2012 в 23:49
поделиться