Ответ 1
Эта функция добавлена: если это не путь (файл не найден), он оценивается как имя переменной. https://github.com/visionmedia/ejs/pull/156
У меня есть глобальный заголовок, который используется в нескольких местах, и я пытался определить его местоположение в переменной, которая может быть передана при визуализации шаблона.
Что-то вроде:
var headerLocation = 'some/location/header.ejs';
res.render( viewDir + '/index', {
header: headerLocation
} );
И в файле шаблона:
<% include header %>
заголовок - это значение, переданное вместе с рендером.
Это кажется невозможным, но, возможно, я пропустил что-то, поэтому подумал, что я попрошу здесь.
EDIT:
Это упоминается в комментариях к ответам ниже, но для обобщения это теперь доступно в версии 2 EJS.
Смотрите здесь: https://github.com/mde/ejs#includes И связанная дискуссия здесь: https://github.com/tj/ejs/issues/93
Эта функция добавлена: если это не путь (файл не найден), он оценивается как имя переменной. https://github.com/visionmedia/ejs/pull/156
Вот какой-то демо-код, который может выполнять динамический.
Просмотр
<div flex class="main-container">
<%- include(page) %>
</div>
маршрутизатор
router.get('/', function (req, res, next) {
res.render('pages/index', {
page: 'home'
});
});
Несмотря на то, что это старый вопрос, отвечая на него ради других.
В соответствии с документацией github, похоже, EJS не имеет понятия блоков, включая только время компиляции. Поскольку время его компиляции включает, вам нужно жестко определить местоположение.
Итак, вы остаетесь с передачей некоторых флагов и выполняете, если проверяете в заголовке или обрабатываете заголовок как html и передаете его всем шаблонам...
Старая тема, но она может кому-то помочь.
Самое замечательное в EJS - это то, что это просто Javascript. Так что-то вроде следующего должно работать:
<%
const fs = require('fs');
const content = fs.readFileSync(partial);
%>
<%- content %>
Надеюсь, это поможет.