2011-12-06 3 views
18

私はnode.jsにウェブサイトを持っています。ページを作成するには、mypageと言いました。私は、layout.jademypage.jadeの両方のファイルを作成する必要があることに気付きました。 mypage.jadeにコードを入れても表示されないので、最初にlayout.jadeにページのレイアウトを入力する必要があります。jadeテンプレートエンジン、layout.jadeの使い方は?

私の質問は、例えばmypage.jadeのコンテンツを特定のコンテナにロードしたいと考えているのですが、layout.jadeの中でどのように参照するのですか?同じレイアウトの異なるページを持つことはできますか?これどうやってするの?

おかげ

+0

あなたはExpressを正しく使用していますか? – alessioalex

+0

はい、申し訳ありませんが言及していません。私はExpressを使用しています。 – Masiar

答えて

30

http://expressjs.com/guide.html#view-rendering

あなたが世界的にそれらを無効にすることができ、レイアウトを使用しない場合:

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

あなたはレイアウトがデフォルトとExpressで有効になっていることを実行しない場合your_view_folder/layout.jadeで標準レイアウトを検索します

各ルート別に別のレイアウトを指定することもできます:

res.render('page', { layout: 'mylayout.jade' }); 
// you can omit .jade if you set the view engine to jade 

ここにあなたのレイアウトファイルは可能性方法は次のとおりです。ボディは「mypage.jade」から取られること

doctype html 
html(lang="en") 
    head 
    title Testing 123 
    body 
    div!= body 

注意。

編集

アプリケーションファイル(ルートとコンフィグを含む):ここ

は、アプリケーション内の実際の例です
https://github.com/alexyoung/nodepad/blob/master/app.js

レイアウトファイル:
https://github.com/alexyoung/nodepad/blob/master/views/layout.jade

+0

私がやっていることは、 'res.render(__ dirname + '/ pages/index.jade'、{user:usr});'です。つまり、私のユーザをラップするオブジェクトに与えることですレイアウトと呼ばれるフィールドを追加し、私のレイアウトを与えますか?現在は、指定していないのに既にレイアウトを使用しています( 'index.jade'を読み込まずにレイアウトを読み込みます)さらに、div = bodyどのようなものが' .jade'ファイルの本文ですか? – Masiar

+0

私のメッセージで述べたように、レイアウトはデフォルトで有効になっていますので、特定のページのレイアウトをしたくない場合はres.render( 'index.jade'、{user:usr、layout:false}ボディの値= .jadeファイルの内容はい – alessioalex

+0

ありがとう、正確にこれを読んだのはどこですか?私はヒスイのウェブサイトを検索しましたが、何か有用なものは実際には見つかりませんでした。 – Masiar

4

少し遅れてしまいましたRTYが、私が最初に答えを見つけるのに苦労... layout.jade

doctype html 
html(lang="en") 
    head 
    body 
     h1 Hello World 
     block myblock 

で はその後index.jade

extends layout 
    block myblock 
     p Jade is cool 

に急行3では

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<body> 
    <h1>Hello World</h1> 
    <p>Jade is cool</p> 
</body> 
</html> 
+1

どうします!=ボディは?詳細はこちら。 – qodeninja

+0

@qodeninja - docs: "バッファリングされていないコードは!=で始まり、テンプレート内のJavaScript式を評価した結果を出力します。これはエスケープしないので、ユーザーの入力には安全ではありません" –

1

私も角度で、私に最良の結果を与えているのアプローチを知って

(角-ルート/ NG-ビューを置換します)まず明示レイアウトをインストールする必要があります:

その後
npm install --save express-layout 

、急行があなたの中layout.jadeファイルを検索しますr views/フォルダーだから、その内部に、あなたが使用することができます。

ビュー/ layout.jade

html 
    head 
    meta(charset='utf-8') 
    title= title 
    body 
    div!= body 

景色を/ home.jade

h1 Welcome aboard, matey! 

server.js

var express = require('express'), 
    layout = require('express-layout'); 

var app = express(); 

app.get('/', function(req, res) { 
    res.render('home', { 
    title: 'Welcome!' 
}); 
その後

app.set('layout', 'default'); 

:デフォルト(はい、.jade拡張子を記述する必要はありません)あなたのビュー/フォルダにlayout.jadeを検索する表現が、あなたが使用して、デフォルトを変更することができますすることで

expressはデフォルトのレイアウトとしてviews/default.jadeを使用します。

また、あなたは、特定のページに異なるレイアウトを使用したい場合は、あなたが使用することができます。

app.get('/', function(req, res) { 
    res.render('home', { 
    layout: 'login', 
    title: 'Welcome!' 
}); 

ここでは、レイアウトとしてlogin.jadeレンダリングされます表明します。

Jadeをデフォルトのビューエンジンとして使用していて、ビューのデフォルトフォルダを変更しないとします。

ここにはexpress-layout docがあります。

+0

Nice approach..It私のために働いた –

関連する問題