web-dev-qa-db-ja.com

Express 3とEJSのレイアウト

Expressのバージョン3では、いくつかの機能が削除されました。

_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()includeと呼ばれるEJS独自の機能に変更できますが、レイアウトの代替は何ですか?

15
artvolk

Express 3以降、レイアウト機能はテンプレートエンジンの責任に委ねられているようです。レイアウトにはejs-locals( https://github.com/RandomEtc/ejs-locals )を使用できます。

Ejs-localsをインストールする

npm install ejs-locals --save

App.jsのアプリエンジンとしてejs-localsを使用する

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">
...

別のオプションは、express-partials( https://github.com/publicclass/express-partials )を使用することです。 2つは同じことをするので、それはあなたの選択です。

13
Andy

私もこれで苦労しました。そこで、ejsとdustjsの例を含むgithubプロジェクトを作成しました。

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

パーシャルとインクルードの違いはわかりません。明示的にデータをインクルードに渡す必要はありません。なぜパーシャルが欲しいのかわからない。

ただし、レイアウトの場合は、次のようにブロックを指定するだけです。

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

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

他の例を追加したい場合は、プルリクエストを送信してください。

18
chovy

「include」オプションを使用して、Express 2.xのEJSレイアウトを模倣できます。ここで私の答えを見てください:

https://stackoverflow.com/a/12477536/446681

0
Hector Correa