2017-04-01 18 views
0

私はPost Djangoのブログアプリのモデルです。フィールドにはbodyというフィールドがあります。投稿では、私はMathJax.jsを使う必要があるので、私はラテックスを使うかもしれません。いくつかの投稿では、コードスニペットを追加するので、highlight.jsを使用します。私は両方を使用するものもあれば、使用しないものもあります。DjangoでJavaScriptファイルを選択的に読み込み

THISと同様のPostモデルのbodyフィールドに応じて、関連するjavascriptを読み込みたいとします。関連する.jsファイルを自動的にロードするにはどうすればよいですか?

私はhasLatexTrueFalse)またはhasCodeTrueFalse)のようなインジケータフィールドを追加することができます知っています。しかし、私は怠惰です、私はPost.bodyが自動的にスキャンされ、関連するjsファイルのみが読み込まれるようにします。

+0

私はデフォルトで両方をロードするだけで、ブラウザによってキャッシュされ、ユーザごとに最大でも1回読み込まれます。それ以降はオン/オフを切り替えることはあまりありません。まだ動的なjs includesが必要な場合 - ブールラテックス= yes/noフィールドを追加する必要があります。ポストの作成/編集中ではなく、すべてのポストビューでラテックスを検出するのは無駄です。 – serg

+0

私はリソースを無駄にする論理を理解しており、専用のブール変数を使用して得られるパフォーマンスの向上に同意します。しかし、私はそれを自動的に行うことができるかどうかは疑問です。 – HBat

答えて

0

コンテキストを設定するか、テンプレートコンテキストプロセッサを使用します。たとえば、formキーがある場合はフォームを処理するコードをロードします。ほとんどすべてのページで必要なものについては、私はそれを無効にするためにno_somethingを文脈に入れました。これは、基本テンプレートにタグの周りに条件を付けることによって行われます。変数が存在しない場合、またはfalseの場合、変数は表示されません。

また、自分の静的ファイルを自分のコンテキスト内のリストに入れます。 JavaScriptはcontext['js']に、CSSはcontext['css']にあります。それらは私のヘッダーにループされています。私は基本クラスでget_context_dataを実装することができ、それから伸びるすべてのビューはjavascriptとcssファイルを持ちます。

+0

'no_something'を' Post'モデルでインジケータフィールドを追加する方法とは違う方法を見ていませんでした。私は "テンプレートコンテキストプロセッサ"を知らない、私はそれをチェックします。 – HBat

関連する問題