2017-01-20 9 views
1

.ejsファイルを現在の内容に置き換えることはできますか?EJSにはラッパーが含まれています

私はこのような一般的なレイアウトがしたい: layout.js:

<!DOCTYPE html> 
<html> 
<head> 
</head> 
<body> 
    <div id="header"></div> 
    <div id="content"> 
    <!-- I want to "inject" my code here --> 
    </div> 
</body> 
</html> 

を、私はこのように、別のファイルから、このテンプレートを使用したい: content.ejs

<% inside(layout) ? { %> 
<a href="">content</a> 
<% } %> 

このようなことをすることはできますか?

私は現在、これを逆に行っています。私はパラメータinclude_nameでレイアウトを呼び出しますが、少し不便です。私は汎用コンテンツ自体を含む関連するcontent.ejsに電話したいと思います。これは可能ですか?

おかげで、EJS Documentationから

答えて

1

EJSが特異的にブロックをサポートしていませんが、レイアウトは がそうのように、ヘッダーとフッターを含めにより実現することができます。

<%- include('header') -%> 
<h1> 
    Title 
</h1> 
<p> 
    My page 
</p> 
<%- include('footer') -%> 

いくつかのフレームワークには、問題に対処するためのいくつかの機能があります。たとえばExpress用までのバージョン3.xレイアウトのサポートを持っていたあなたは、スタンドアローンNPMパッケージとしてそれを使用することができ、最新バージョンのため:あなたのスケルトンテンプレートに<%- body %>領域を規定する代わりに、このパッケージではexpress-partials

layout.ejsを)とお電話、ご希望のレイアウト(content.ejs)は、layout.ejsをレンダリングする表現content.ejs <%- body %>として(あなたはそれが唯一のcontent.ejs)をレンダリングする{layout:false}を設定しない限り:

layout.ejs

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
    <div id="header"></div> 
    <div id="content"> 
     <%- body %> 
    </div> 
    </body> 
</html> 

content.ejs

<a href="">content</a> 

app.js

var express = require('express') 
    , partials = require('express-partials') 
    , app = express(); 

// load the express-partials middleware 
app.use(partials()); 

app.get('/',function(req,res,next){ 
    res.render('content.ejs') 
    // -> render layout.ejs with content.ejs as `body`. 
}) 

app.listen(3000); 
関連する問題