4

Express のビュー エンジンとして EJS を試しています。私のlayout.ejsは使用されていないようです。私の「views」フォルダには、index.ejs と layout.ejs の 2 つのビューがあります。index.js はレンダリングされているようですが、layout.ejs はレンダリングされていません。layout.ejs ファイルには CSS ファイルが含まれている必要がありますが、ブラウザーでページがレンダリングされると、そこにはありません。layout.ejs ファイルに配置したテスト テスト テキストは、応答と共に出力されません。

追加の構成手順がありませんか?

ありがとう!

私のserver.jsコード:

var express = require('express');

var app = express();
    app.set('view engine', 'ejs');
    app.use(express.static(__dirname + '/public'));
    app.get('/', function(req, res){
            res.render('index.ejs', {title: 'EJS Engine'});
    });

    app.listen(8080);

私のlayout.ejsでは、publicフォルダーにある単一のcssファイルにリンクしています。

レイアウト.ejs:

<!DOCTYPE html>
       <html>
       <head>
           <title><%= title %></title>
            <link rel="stylesheet" type="text/css" href="main.css">
       </head>
       <body>
              <%- body %>
       </body>
       </html> 

index.ejs

<div id="container">
        index.html
</div>
4

3 に答える 3

1

同様の問題があります。私の場合、むしろ Jade を使用したいと考えていますが、特定のプロジェクトではより「html」スタイルのテンプレート エンジンが必要です。最初に、express-partials または ejs-locals (Jonathan Lonowski のコメントで述べたように)、または Jade テンプレート内でパイプまたはドット構文を介して html を使用することさえ検討しました (そのオプションとこのSO 投稿の詳細については、こちらを参照してください)。このプロジェクトに、express-partials と ejs-locals の追加の依存関係を導入することができません。これら 2 つのプロジェクトは見栄えがよく、ニーズを満たす可能性があります。

これらのプロジェクトを使用したくない場合は、次のようにすることができます。

views/layout-head.ejs

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>The title</title>
</head>
<body>

ビュー/layout-foot.ejs

</body>
</html>

views/index.ejs (またはその他のページ)

<% include layout-head %>
This is the index page - <%= title %>
<% include layout-foot %>

ルート/index.js

exports.index = function(req, res){
  res.render('index', { title: 'Express' });
}

これは最適な解決策ではありませんが、機能します。私のアプリケーションのほとんどは単一ページのアプリであり、他のいくつかの制限内で作業する必要があるため、これは私のニーズに合っています。多くの場合、これは最適な解決策ではない可能性があります。特に、複雑なレイアウトや変化するレイアウトがある場合はなおさらです。

于 2013-10-12T19:25:02.663 に答える