2012-06-08 15 views
5

Djangoテンプレートシステムの非常に奇妙な動作に遭遇しました。何の終了条件が存在しないため、このようなテンプレートは、レンダリングされるチャンスを持っていない、もちろんDjangoの条件付きインクルードタグ

{% include "test.html" %} 

:私は自分自身を再帰的に含むテンプレートファイル、すなわちtest.htmlを、持っています。 OK、のは、次のことを試してみましょう:test_falseテンプレートに渡され、Falseに等しい変数である

{% if test_false %}{% include "test.html" %}{% endif %}, 

一つは、それだけでは何も含まれないことを期待していますが、それはありません:

RuntimeError at /test/ 
maximum recursion depth exceeded while calling a Python object 

私はそれを得ることはありません。インクルードタグは現在のコンテキストから引数を取ることができるので、ページの他の部分の前に実行されるのではないかと疑います。なぜそれが条件タグを無視するのですか?

答えて

6

Djangoには、コンパイル時に定数によって与えられるテンプレートが含まれています。

セット変数へのテンプレートの名前とはそのようにそれを含める:

{% include test_template %} 

Djangoはそれが最適だとあなたのコードは動作するはずです使用することはできません。

-1

Thomaszはパスが含むテンプレートで文字列定数として定義されている場合Djangoは唯一この最適化を行うことができます、と言うように - そうのような:

{% include "test.html" %} 

しかし、私はむしろ、テンプレートパスを配置する必要はありませんPythonコードからのコンテキストだからここ

は、同じ結果を達成するためのもう少し自己完結型の方法である - withに含めるをラップ:

{% with "test.html" as path %} 
    {% include path %} 
{% endwith %}