web-dev-qa-db-ja.com

jinja2テンプレートディレクティブを使用した外部スクリプトの読み込み

私はjinja2と一般的なテンプレートの使用に非常に慣れていないので、外部JavaScriptをロードする簡単な方法があるかどうか疑問に思いました。私は使用することを考えていました:

{% block javascript %}
    <script src="myscript.js"></script>
{% endblock %}

しかし、私は尋ねざるを得ません:

テンプレートディレクティブ内からこのスクリプトを直接ロードする方法はありますか?

23
kirbuchi

ここでは2つの選択肢があります。1つ目はそれを行った方法です。適切なマークアップをテンプレート(または最初のテンプレートを拡張するテンプレートでオーバーライドできるようにする場合はブロック)に追加するだけです。

2番目の方法は、Jinja2の include 関数を使用することです。

{% block javascript %}
    <script type="text/javascript">
        {% include "myscript.js" %}
    </script>
    <!-- The contents of myscript.js will be loaded inside the script tag -->
{% endblock %}

includeを使用する利点は、Jinja2がJavaScriptを含める前に処理することです。つまり、プログラムの状態に応じて変更されるJavaScript内の変数を使用できます。

この方法でincludeを使用することの欠点は同じです-あなたの.jsファイルは送信される前にJinja2を介して実行されます-動的コンテンツを使用していない場合は、リクエストごとにファイルを不必要に処理するだけです-Jinja2構文でjavascriptテンプレートライブラリを使用している場合は、問題が発生する可能性があります。

35
Sean Vieira

この質問はかなり古いものですが、それを行う別の方法も興味深いかもしれません。 Jinja2およびflaskで作業しているときに見つけました。

url_for()を使用しましたが、正常に機能します。

{% block javascript %}
    <script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}

そして、静的フォルダにmyscript.jsがあります。 Jinja2環境で指定されるか、デフォルトでフラスコで指定されます。

3
Sylhare