Макеты в Express 3 и EJS - программирование
Подтвердить что ты не робот

Макеты в Express 3 и EJS

В версии 3 Express некоторые функции были удалены:

the concept of a "layout" (template engine specific now)
partial() (template engine specific)

Список изменений: https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x

partial() можно изменить для собственной функции EJS под названием include, но какова альтернатива для макетов?

4b9b3361

Ответ 1

Похоже, что из Express 3 функция макета делегирована ответственности за механизмы шаблонов. Вы можете использовать ejs-locals (https://github.com/RandomEtc/ejs-locals) для макета.

Установить ejs-locals

npm install ejs-locals --save

Использовать ejs-locals как движок вашего приложения в app.js

var express = require('express');
var engine = require('ejs-locals');
...

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

Теперь вы можете использовать макет

layout.ejs
<body>
  <%- body %>
</body>

index.ejs
<% layout('layout') -%>

<div class="container">
<div class="jumbotron">
...

Другой вариант - использовать выражения с частичным выражением (https://github.com/publicclass/express-partials). Оба делают то же самое, так что это просто ваш выбор.

Ответ 2

Я тоже боролся с этим. Поэтому я предложил проект github с примером для ejs и dustjs.

https://github.com/chovy/express-template-demo

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

Но для макета вы просто указываете такой блок:

//layout.ejs
<html>
<%- body %>
</html>

//page1.ejs
<% layout('layout') -%>
This is loaded from page 1 and overrides <%- body %> in the layout.ejs.

Если кто-то хочет добавить больше примеров, просто отправьте запрос на перенос.

Ответ 3

Вы можете имитировать раскладки EJS в Express 2.x с опцией "включить". См. Мой ответ здесь:

fooobar.com/info/326367/...