私はjinja2と一般的なテンプレートの使用に非常に慣れていないので、外部JavaScriptをロードする簡単な方法があるかどうか疑問に思いました。私は使用することを考えていました:
{% block javascript %}
<script src="myscript.js"></script>
{% endblock %}
しかし、私は尋ねざるを得ません:
テンプレートディレクティブ内からこのスクリプトを直接ロードする方法はありますか?
ここでは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テンプレートライブラリを使用している場合は、問題が発生する可能性があります。
この質問はかなり古いものですが、それを行う別の方法も興味深いかもしれません。 Jinja2およびflaskで作業しているときに見つけました。
url_for()
を使用しましたが、正常に機能します。
{% block javascript %}
<script src="{{ url_for('static',filename='myscript.js') }}"></script>
{% endblock %}
そして、静的フォルダにmyscript.js
があります。 Jinja2環境で指定されるか、デフォルトでフラスコで指定されます。