3

「ウィジェット」(レンダリングされたオブジェクトで、いくつかのカスタム JavaScript ファイルを使用する) を開発しているときに、「included-scripts-manager」のようなものを作成する必要に直面しました (複数のウィジェットがレンダリングされるときに同じ JS ファイルが二重に含まれるのを避けるため)。ビューのために)。

私の最初のアイデアは、テンプレートで EXTRA_SCRIPTS 変数を提供するカスタム テンプレート レンダリング コンテキストを作成することでした。ただし、リクエスト処理中にスクリプトのリストをどこで収集すればよいかわかりません。それがシングルトンオブジェクトが必要な場所だと思います。

助言がありますか?

4

1 に答える 1

3

シングルトンを使用すると、スレッドセーフの問題が発生します。たとえば、アプリケーションは複数のスレッドで実行され、1 つのスレッドが単一の要求を処理するため、グローバル オブジェクトはスレッドごとに存在する必要がありますが、シングルトンはプロセスごとに一意です。この質問でthreading.local説明されているような手法を使用できます。スレッドごと、つまりリクエストごとに一意のオブジェクトを提供します。

ただし、推奨されていないため、グローバル変数は使用しないでください

ウィジェットの状況では、Django のウィジェットとフォームに Media 設定があります。https://docs.djangoproject.com/en/1.3/topics/forms/media/

メディア オブジェクトを一緒に追加することもできます。2 つのメディア オブジェクトが追加されると、結果の Media オブジェクトには、両方のファイルからのメディアの結合が含まれます。

したがって、メディアで重複と戦うことができます。また、メディアをテンプレートに直接結合することもできます

{{ form.media|add:info_form.media|add:discount_form.media }}
于 2012-01-03T13:33:34.000 に答える