Node.js — EJS — включая частичное

Я пытаюсь использовать встроенный модуль визуализации Javascript для узла: https://github.com/visionmedia/ejs

Я хотел бы знать, как я могу включить другой файл представления (частичный) в файл представления .ejs.


person jeffreyveon    schedule 23.03.2011    source источник
comment
Я считаю, что частичная система на самом деле является частью ExpressJS. Вы используете фреймворк Express?   -  person Zikes    schedule 23.03.2011
comment
Нет, я не использую это. Вероятно, мне придется пойти по этому пути, если это невозможно только с помощью механизма шаблонов.   -  person jeffreyveon    schedule 24.03.2011


Ответы (11)


С Экспресс 3.0:

<%- include myview.ejs %>

путь является относительным от вызывающей стороны, которая включает файл, а не от каталога представлений, установленного с помощью app.set("views", "path/to/views").

EJS v1 включает
EJS v2 включает

(Обновление: новейший синтаксис для ejs v3.0.1 — <%- include('myview.ejs') %>)

person Philipp Kyeck    schedule 07.07.2011
comment
это должен быть правильный ответ, так как разработчик ejs/express обновил код. - person Joshua; 20.07.2011
comment
В ejs2 у меня был такой код, который выглядел так и работал. ‹% include myview.ejs %› В ejs3 это должно выглядеть так ‹%- include('myview.ejs') %› Угадайте, сколько часов мне понадобилось, чтобы понять, что я должен был добавить тире в начале? (Просто добавляю этот комментарий на случай, если кто-то еще в такой же ситуации прочитает его.) - person Griffin; 07.08.2020
comment
<%- include('partials/footer') %> тоже работает - person Hossam Maher; 26.12.2020
comment
Большое спасибо за обновление последнего синтаксиса - person PAbleBoo; 08.03.2021
comment
Правильная ссылка теперь должна быть: github.com/mde/ejs#includes. - person j3st; 12.06.2021

В Express 4.x я использовал следующее для загрузки ejs:

  var path = require('path');

  // Set the default templating engine to ejs
  app.set('view engine', 'ejs');
  app.set('views', path.join(__dirname, 'views'));

  // The views/index.ejs exists in the app directory
  app.get('/hello', function (req, res) {
    res.render('index', {title: 'title'});
  });

Тогда вам просто нужно два файла, чтобы заставить его работать - views/index.ejs:

<%- include partials/navigation.ejs %>

И views/partials/navigation.ejs:

<ul><li class="active">...</li>...</ul>

Вы также можете указать Express использовать ejs для html-шаблонов:

var path = require('path');
var EJS  = require('ejs');

app.engine('html', EJS.renderFile);

// Set the default templating engine to ejs
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

// The views/index.html exists in the app directory
app.get('/hello', function (req, res) {
  res.render('index.html', {title: 'title'});
});

Наконец, вы также можете использовать модуль макета ejs:

var EJSLayout = require('express-ejs-layouts');
app.use(EJSLayout);

Это будет использовать views/layout.ejs в качестве макета.

person czerasz    schedule 19.09.2015
comment
я пропал) ошибка, я должен поставить ее как ‹%- включить ('partials/navbar.ejs') %› - person rickvian; 24.06.2020

Работает с Express 4.x:

Правильный способ включения частичных фрагментов в шаблон в соответствии с этим следует использовать:

<%- include('partials/youFileName.ejs') %>.

Ты используешь:

<% include partials/yourFileName.ejs %>

который устарел.

person asapxj07    schedule 06.04.2020

Начиная с Express 4.x

app.js

// above is all your node requires

// view engine setup
app.set('views', path.join(__dirname, 'views')); <-- ./views has all your .ejs files
app.set('view engine', 'ejs');

ошибка.ejs

<!-- because ejs knows your root directory for views, you can navigate to the ./base directory and select the header.ejs file and include it -->

<% include ./base/header %> 
<h1> Other mark up here </h1>
<% include ./base/footer %>
person Daniel Ram    schedule 11.01.2016

Express 3.x больше не поддерживает частичное. Согласно сообщению ejs 'partial не определен', вы можете использовать "include" ключевое слово в EJS для замены удаленной частичной функциональности.

person VCD    schedule 05.12.2012
comment
Проверьте ejs-locals для поддержки Express 3. - person UpTheCreek; 27.03.2013

В официальной документации https://github.com/mde/ejs#includes показано, что включает работы как это:

<%- include('../partials/head') %>
person Clairton Luz    schedule 29.01.2020

app.js добавить

app.set('view engine','ejs')

добавьте свой частичный файл (ejs) в представления / частичные

в index.ejs

<%- include('partials/header.ejs') %>
person Vardhman Jain    schedule 15.06.2020

Также ‹%- include('partials/header.ejs',{paramName: paramValue}) %›

person caglaror    schedule 23.06.2021

Для включения файла ejs необходимо использовать:

<%- include("relative path of ejs ") -%>

person rahul majhi    schedule 21.06.2021

EJS сам по себе в настоящее время не поддерживает частичные представления. Экспресс делает.

person jeffreyveon    schedule 11.05.2011
comment
Устаревшая информация. Новая версия поддерживает это согласно комментарию @pkyeck. - person Joshua; 20.07.2011

person    schedule
comment
Добро пожаловать в Stack Overflow, Энивиду, Индонезия. Пожалуйста, рассмотрите возможность добавления более подробной информации к вашему ответу, а не только кода. - person Igor Escodro; 18.12.2019