2009-05-05 4 views
0

私はちょうど子テンプレートのbodyタグのid属性を定義したいと思います。最初のソリューションは完璧に動作します:テンプレート継承で変数を扱う方法

base.html:

[body{% block bodyid %}{% endblock %}] 

のchild.html:

{% block bodyid %} id="myId"{% endblock %} 

それはシンプルかつクールです!しかし、私はすべての子テンプレートでid = "myId"を指すのは好きではありません。私は値 'myId'を親テンプレートに送り、id = "...."にします。だから、私はこの方法を発明:

base.html:

[body{% block bodyid %} id={{ bodyid }}{% endblock %}] 

のchild.html:

{% block bodyid %} 
    {% with 'myId' as bodyid %} 
     {{ block.super }} 
    {% endwith %} 
{% endblock %} 

しかし、それは最初のソリューションを比較することがひどいと面倒です。これを行うには良い方法はありますか?

この問題はbodyIdを管理するよりも深刻です。私は、標準のジャンゴテンプレートの継承を通して、サブテンプレートシステムを見つけて整理しようとしています。子テンプレートで

<body id="{% block bodyid %}{% endblock %}"> 

:基本テンプレートで

答えて

2

私が正しくあなたの質問を理解していれば、これはあなたが望むものを達成するのに十分であるべきで

{% block bodyid %}myId{% endblock %} 

。実際のID(myId)のみを基本テンプレートに送信してください。

+0

これは私がいつも使っている方法です – Rasiel

+0

年ですが、child.htmlの{{bodyId}}を定義していないときは空のままにしておきたいと思います。 – ramusus

+0

デフォルトのID {body_id}を定義していない場合、空のままにしておきたくありません: – Eraldo

0

あなたのコードでこれを設定します。あなたのIDはコンテキストオブジェクトの一部であり、それを子テンプレートに入力する必要はなく、呼び出すビューだけです。

あなたは、コンテキストオブジェクトからIDを取得、またはいうだけで、それ用のテンプレートの構文を使用するようにベーステンプレートを伝えることができます。

<body id="{{ body_id }}"> 

もちろん、ここで個人的な好みを、そしてそれはの構造に依存しますあなたのテンプレートとビューが、私はそれをやる方法です。

+0

年}私のビューまたはchild.htmlで – ramusus