ユーザー固有の配色を使用できるようにするという目標を達成する方法はたくさんありますが、それぞれに長所と短所があります。
名前を付けたファイルで Bootstrap のようなフレームワークを使用していると思います。
オプション 1: 色固有のスタイルのインライン CSS (推奨)
これは、パフォーマンスとシンプルさから私が好むオプションです。ユーザーごとにカスタマイズした色をそれぞれ保存したり、特定の学校を表す色を再利用できるようにモデルを作成したりすることもできます。これはデータベースに保存され、非常に多くの類似したファイルを生成することなく、非常に多数のカラー スキームに拡張できます。
color 変数を使用するスタイルを持つテンプレート コードでスニペットを作成します。
base.html
{% include "color-snippet.css" with main-color="{{ user's main color }}" alt-color="{{ user's alt color }}" %}
color-snippet.css (このファイルはテンプレート エンジンによって処理されるため、テンプレート ディレクトリにあります。
<style>
.some-style {
color: {{ main-color }} !important;
}
</style>
したがって、これの大きな欠点は、変数を超えて Bootstrap をカスタマイズする必要があることです。less ファイルを grep して、生成されるすべてのクラスを見つけ、スタイルを CSS でスニペットにコピーする必要があります。新しいBootstrapにアップグレードしたい場合は、前もっていくらかの投資が必要ですが、スタイルの色部分を分離して、実行時に動的に派生させることができます.
あなたのcollectstaticステップの外でlessのコンパイルを扱う必要がないので、私はこのアプローチを好みます。
オプション 2: LESS のクライアント側コンパイル
動的に作成され、必要な変数を返すファイルを Django に提供させることができます。次に、クライアントで less.js をコンパイルします。
これには、静的パスの一部ではない Django によって処理される URL パス (/style/variables など) をベース テンプレートに追加し、ビューでハンドラーを作成してから、少ないファイル変数となるテキスト コンテンツを返すことが含まれます。 .
オプション 3: LESS のサーバー側コンパイル
私はDjango Pipelineを使用して、less から css へのサーバー側のコンパイルを行います。Django アプリケーションを操作するには、セットアップが必要です。開発モードでは、Django Pipeline はすべてのリクエストで関連する less ファイルを CSS ファイルにコンパイルします。プロダクション モードでは、コンパイルされたファイルへの適切なファイル パスを指します。それはにフックするcollectstatic
ので、あなたの less はコンパイルされますcollectstatic
。
このアプローチの最大の問題は、静的ファイル (以下 + css ファイルが css にコンパイルされるもの) のマッピングが設定ファイルで定義されていることです。これを更新すると、サーバーの再起動が必要になります。Djangoパイプラインの仕組みに基づいて独自のサーバー側のコンパイルを減らすことができますが、サーバーの再起動が必要なものでマッピングを定義する代わりに、マッピングのロジックを使用できます。
これは大変な作業であり、Bootstrap のコンパイルが少ないことは、要求ごとに行うのは簡単ではありません。
Django サーバー プロセスを再起動する必要のない独自のマッピングを作成した場合は、いつでも collectstatic を実行して新しい css ファイルを作成できます。これにより、すべてのリクエストでのコンパイルが回避されます。
この最後のアプローチはあなたが言及したものに最も近いですが、色固有のスタイルを分離してdjangoテンプレートを使用してカスタマイズするよりも、はるかに多くの作業とエラーが発生しやすいようです.
最後のアプローチは、事前にすべてのマッピングを作成し、実行時に独自のマッピングを生成させないため、スキームの数がかなり少ない場合にもうまく機能します。彼らはそれらを提案することができ、定期的なリズムでそれらを更新することができます.