2016-05-01 5 views
16

レイアウトテンプレートに柔軟性を追加したいが、それを行う方法が見つからない。これはDjangoの 'extended'テンプレートに変数を渡す方法ですか?

私はextendレイアウトテンプレートに変数を設定する方法を探しています。つまり、テンプレートツリー内で変数を上にずらすことはできません。

# views.py 
def my_view_func(request): 
    return render(request, "child.html") 

# child.html 
{% extends 'layout.html' with show_sidebar=True sidebar_width_class="width_4" %} 

<div>Templates stuff here</div> 

# layout.html 
{% if show_sidebar %} 
    <div class="{{ sidebar_width_class }}"> 
     {% block sidebar %}{% endblock %} 
    </div> 
{% endif %} 

私は今、数行のコードで差の4つのテンプレートを維持する必要があります。たとえば、サイドバーの幅クラスによって互いに異なる2つのテンプレートがあります。私は何か間違っているのですか?

+0

@xpy:

{% block sidebar_wrapper %} {% if sidebar %} <div class="width{{sidebar_width}}"> {% block sidebar %}{% endblock %} </div> {% endif %} {% endblock sidebar_wrapper%} 

そして、あなたの子テンプレートに。私の質問では、私はレイアウトテンプレートを変数で拡張する方法を探しています。すなわち、変数をテンプレートツリー内で上に移動させずに渡します。 –

+0

申し訳ありませんが、誤解されています。 – xpy

+3

コンテキスト 'render(request、" child.html "、{'sidebar_width':" width_4 "})'で変数を渡さないのはなぜですか? –

答えて

2

私はblockはあなたが最初の場所で探しているものがあると思われます。

このような基本テンプレート内のあなたのブロックを形成:いや、

{% extends 'layout.html' %} 
{% block sidebar_wrapper %} 
    {% with sidebar=True sidebar_width=4 %} 
     {{ block.super }} 
    {% endwith%} 
{% endblock sidebar_wrapper%} 
+0

いいえ..あなたの例は、変数を渡すことです。テンプレートをレンダリングしてレイアウトを拡張すると、そのような可能性はありません。 –

+0

私は自分の質問を更新しました。もっと明確になることを願っています。 –

+0

@AlexTこれはどのように「ダウン」ですか?'sidebar_wrapper'は親テンプレート内にあり、子テンプレートでは、' with'ステートメントで親テンプレートのブロックに使用する値を定義します。 – xpy

5

必要なのは、インクルードテンプレートタグです。別のテンプレートにテンプレートを組み込み、特定のコンテキストでテンプレートをレンダリングすることができます。ここ

{% include 'layout.html' with sidebar=True sidebar_width=4 %} 

チェックドキュメント:https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#include

+4

私はそれを含めることではなく、テンプレートを拡張したい。 –

+0

サイドバーの一部はスニペットのように見えますが、コンテキストで設定できるので、サイドバーのスニペットをテンプレートにして、特定のコンテキストを持つ他のテンプレートに含めることをおすすめします。サイドバーは一般的な構成可能なテンプレートであり、拡張することはできません。 –

+0

サイドバーのないレイアウトテンプレートはどうでしょうか? f.e.私は、サイドバーwidth3、width4、サイドバーなしのページを持っています。この3つのレイアウトのコンテンツ部分は互いに異なり、コンテンツ部分のマークアップは毎回{%ブロックのコンテンツ%}に含めるのが非常に複雑です。 –

関連する問題