4

私はexpressを使用してlayout.jadeをレンダリングしようとしていますが、私のディレクトリツリーはかなり標準的です。

├── apps
│   └── fridge_face
│       ├── routes.coffee
│       └── views
|           └── index.jade
├── server.js
└── views
    ├── layout.jade
    └── stylesheets
        └── style.styl

私のroutes.coffeeでは、index.jadeをレンダリングするとすべてうまくいきますが、レイアウトはレンダリングされません。レイアウトを移動しようとしましapps/fridge_face/views/たが、成功しませんでした。

レイアウト構成は行っていません。

これが私の

レイアウト.ジェイド

doctype 5
html
  head
    title 'What is up'
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    != body

ルート.コーヒー

routes = (app) ->
  app.get '/', (req, res) ->
    Word.once 'wordsFetched', (params) ->
      res.render "#{__dirname}/views/index",
        layout: true
        words: params.map (word) -> word.word

    Word.getWords()


module.exports = routes

server.js 構成

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express['static'](__dirname + '/public'));
});

レイアウトがレンダリングされない可能性がある、またはレンダリングされないものは何もないことがわかります...何が間違っているのですか?

編集


私はこの質問を非常に長くしていることを知っていますが、いくつかの開発を追加しています. 初め

!=両方のディレクトリのレイアウトから削除しても、何も変わりません。私のビューはまだレイアウトフリーでレンダリングされています。

追加すると

app.set('view options', {
  layout: false
});

次に、いずれかを使用してビューにレイアウトを明示的にレンダリングします

layout: "#{__dirname}/views/layout"
# OR
layout: "layout"
# OR
layout: true

何も起こらず、ビューはレイアウト フリーでレンダリングされます...

4

4 に答える 4

6

上記の誰かが言ったように、あなたはバージョン 3.0 を使用しています。これは、レイアウトとパーシャルを取り除き、テンプレート エンジンがそれを処理できるようにします。移行wikiによる答えは次のとおりです。

「EJS でレイアウト機能を取り戻すには、express- partials または ejs-locals を使用できます。」

( https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.xから)

私は最終的にエクスプレスパーシャルを使用しましたが、その例とまったく同じように機能しました。まだ十分な評判がないため、ejs-locals へのリンクを投稿できませんでしたが、wiki で見つけることができます。

于 2012-10-17T00:43:06.520 に答える
1

新しいエクスプレスバージョンで古いコードを使用しています。テンプレートシステムの新しい使用法については、 http: //github.com/visionmedia/jadeを参照してください。

于 2012-07-19T13:57:25.250 に答える
0

を呼び出すときに、レイアウトファイルへのパスを明示的に指定してみてくださいrender。エクスプレスドキュメントに例があります:

res.render('page', { layout: __dirname + '/../../mylayout.jade' });

私の推測では、ビュー名が修飾されていないか、ファイルシステムパスとして指定されているかによって、express/jadeには異なるロジックがあります。

于 2012-07-19T13:56:35.570 に答える
0

レイアウトが機能しない場合は、部分的に試すことができます。私は ejs を使用しています:

app.get('/', function(req,res){
 res.render('layout.ejs', { layout:false,
   locals : {
        body: '../apps/index.ejs' ,
        name : "Daniel"
 }});
});

そして、layout.ejs では:

<html>
...
<%-partial(body)%>
<html>

index.ejs で:

<h1>Hola</h1>
<%=name%>
于 2012-07-19T14:22:27.333 に答える