2017-01-25 2 views
0

超基本的な質問ですが、私は何かが欠けているに違いありません。Nunjucksのテンプレート継承はどのような要件ですか?

私は私のページをレンダリング:

router.get('/', function(req, res) { 
     res.render('index.njk', {}); 
}); 

は、レイアウトフォルダに私のベースのレイアウト、メインlayout.njkを作成します。

<!DOCTYPE html> 

<html> 
    <body>  
     {% block content %} 
     {% endblock %} 
    </body> 
</html> 

は私のテンプレートを拡張し、レイアウトにコンテンツを追加するindex.njk :

{% extends 'layout/main-layout.njk' %} 

{% block content %} 
<?php include_once("analyticstracking.php") ?> 
<main> 

    <p>sploooge</p> 

    {% block panel %}{% endblock %} 

</main> 
{% endblock %} 

今私は(ファイルが同じフォルダ内にある)index.njkがpanel.njkによって拡張することがしたいと思います:

{% extends 'index.njk' %} 

{% block panel %} 
    <p>second sploooge</p> 
{% endblock %} 

しかし、私はそれを表示することはできません。ドキュメントには何も言及されていませんが、何とかindex.njkのようにレンダリングする必要がありますか?

答えて

1

私は、この問題はあなたが '中間'ファイルを持っているところにあると考えています。

ファイルツリー:

pages/ 
    -index.njk 

templates/ 
    -base.njk 
    -layout.njk 

base.njk:

<!DOCTYPE html> 
<html lang="en"> 
<head></head> 
<body> 
    {% block content %}{% endblock %} 
</body> 
</html> 

layout.njk

{% extends "base.njk" %} 
{% block content %} 
    Content 
{% block more %}{% endblock %} 
{% endblock %} 

インデックス

は、私は、これは次のような構成で動作するようになりました.njk:

{% extends "layout.njk" %} 
{% block more %} 
    More Content 
{% endblock %} 

出力:あなたはどこにでもあるテンプレートを使用することができます

<!DOCTYPE html> 
<html lang="en"> 
<head></head> 
<body> 
    Content 
    More Content 
</body> 
</html> 

、あなたはちょうどあなたが拡張してURLにそれを加えることを確認する必要があります。例:

{% extends "templates/layouts/extras/template.njk" %} 

これは恐ろしく混乱するかもしれないし、エラーの可能性を増加させますが、理論的にはそれがうまくいくでしょう。

一部の領域でもインクルードを使用してみると、テンプレートの余分なレイヤーを持たないと便利です。

+0

お時間をいただきありがとうございます。本当にありがとうございます。 – JPB

関連する問題