もちろん-{% if ... %}
と { % end %}
ディレクティブの間のテンプレートにあるものはすべてif
、式がTrueの場合にのみブラウザに送信されます。したがって、<script >
インラインjavascriptを使用したタグであれ、<link>
どこかからjavascriptファイルをインポートするタグであれ、そこにあるものはすべて、その場合はネットワーク経由でのみ送信されます。
テンプレートif
またはfor
ディレクティブをJavascriptコード自体の中に配置して、サーバーコードに認識されている条件に基づいてコードの一部を有効または無効にすることもできます。これは、リンクを解除するか、コード全体ではないので、コードのサーバー側とクライアント側を望ましくない方法で絡ませてしまうため、良い習慣とは見なされないと思います。
javascriptから変数にアクセスするには、次のようにします。
var enabled = {{enabled}};
マーカー内の値{{...}}
は、サーバー変数を使用してレンダリングされます。
この場合、値がenabled
PythonとJavascriptの間で互換性があることを確認するには、Falseの場合は0、Trueの場合は1を使用する必要があります(Pythonブール値を使用する場合、テンプレートは次のようにレンダリングされます
var enabled = True;
-これはjavascriptが期待するものではありません、Javascriptで予約されている「true」は小文字であるため)
唯一の制限は、ページがブラウザに送信される前にのみサーバー側の変数を設定できることです。したがって、表示されたページでのユーザーのアクションに依存する変数をサーバー側で設定する必要がある場合、この方法ではそれがカットされなくなります(ページのリロードのみ)。リロードせずにページを相互作用的に更新する方法は、javascript(以前は排他的に「ajax」と呼ばれていた)からの非同期通信に依存することです。
編集-OPはさらに尋ねました:
ここに問題があります。myvar='foo-bar'などの文字列変数をテンプレートに返し、この{{myvar}}がJSコードで評価されると、JSはfoo-barを変数名ではなく変数名として解釈するようです。文字列。この場合、-は減算を表すため、エラーが発生します。JSにfoo-barを文字列値として認識させるにはどうすればよいですか?
繰り返しになりますが、何が起こっているのかは非常に単純です。{{ <expr> }}
テンプレート演算子は、結果の式の文字列表現を挿入します。つまり、Python
myvar = "bla"
とテンプレートを使用している場合は、引用符なしvar myvar = {{ myvar }}
でレンダリングされます(この方法でクライアントブラウザーに送信されます)。var myvar = bla
周りbla
-それがjavascriptがそれを変数名として扱う理由です。この回避策は、Python側またはテンプレートのいずれかで、変数が文字列の場合、変数を引用符で囲むことです。
テンプレートでは、次のことができます
var myvar="{{ myvar }}"
。-または、Python側では、myvarを定義するときに:myvar = '"%s"' % "bla"