2016-08-16 15 views
3

私は "Flask web development"を読んでいます。 、私が使用するどのような状況では 伸び、輸入の違いは何ですか(私は、彼らが、使用中に非常に似ていると思う。) :例4-3で 、Flaskでのインポートと拡張の違いは何ですか?

{% extends "base.html" %} 
{% import "bootstrap/wtf.html" as wtf %} 

私が知りたいの?拡張またはインポート?

答えて

5

あなたextendテンプレートは、あなた(と呼ばれるコントロールの発信者)を制御する別のテンプレート - 「親」テンプレートで唯一の名前のブロックにレンダリングされます。一方

{% extends "base.html" %} 
{% block main_content %} 
Only shows up if there is a block called main_content 
in base.html. 
{% endblock main_content%} 

importは、単純に結合しテンプレートをテンプレートのスコープ内の名前に変換し、いつどこで呼び出すかを制御します(呼び出し元が呼び出し側を制御します)。

{% import "bootstrap/wtf.html" as wtf %} 
Some of your own template code with {{ wtf.calls() }} where it makes sense. 
1

は、です。 {% extends parent.html %}parent.htmlをレンダリングすることができ、{% import %}はテンプレート変数にアクセスすることができますが、{% block %}はその中に定義されています。

したがって、テンプレートの例はbase.htmlで、変数はbootstrap/wtf.htmlからインポートされます。 Pythonのクラス継承やimport文のように考えてください。

0

デフォルトでは、インクルードされたテンプレートは現在のコンテキストに渡され、インポートされたテンプレートは渡されません。デフォルトでは Jinja documentation

含まテンプレートは、インポートしますがキャッシュされません。

なぜなら、インポートはマクロを保持するモジュールとしてよく使われるからです。

マクロを含むテンプレートでインポートを使用するのがベストプラクティスですが、一部のマークアップテンプレートを使用していないときにインクルードを使用することをお勧めします。

関連する問題