2011-07-10 2 views
4

Django標準のDjango sitesフレームワークを使用して、わずかに異なるコンテンツを持つ複数のサイトに配信するDjangoアプリを考えてみましょう。 S:これをホストするDjangoはHTTP要求の "Host"ヘッダに基づいてどのSiteオブジェクトを使用するかを決めます。

伝統的な方法は、それぞれのsettings.pyで異なるSITE_IDを指し、各プロジェクトで複数のDjangoのプロジェクトで複数のSiteオブジェクトと設定アプリを設定することです。

さまざまな理由から、新しいサイトごとに新しいプロジェクトを作成する必要はありません。私は1つのプロジェクトをセットアップし、Djangoが着信HTTPリクエストで参照されるホスト名に基づいてどのSiteオブジェクトを使用するかを把握したいと考えています。

この機能を実現するには、どのような方法が推奨されますか?

明確化:私は(settings.pyにハードコーディングされている)settings.SITE_IDを無視し、代わりに動的にHostヘッダにあるものに基づいてサイトのオブジェクトをフェッチするために、サイトのフレームワークをしたいです。なぜこの要件? 1時間に何度もサイトを追加したり削除したりします。サイトの総量は10,000を超えますので、各サイトにDjangoプロジェクトを設定することはオプションではありません。これはDjangoで解決可能な問題ですか?もしそうなら、それを達成する最良の方法は何ですか?

答えて

2

実行時に設定を変更しないでください。これを行わないことをお勧めします。代わりに、仮想ホスト構成に変数を設定し、WSGIアダプタスクリプトまたはsettingsモジュールがそれに基づいてサイトの1つを選択するようにします。

+0

実行時に設定(SITE_ID)を変更したくないことに注意してください。サイトモ​​ジュールをホスト名ヘッダーに基づいて動的に動作させることが欲しいだけです。これは、要求のホスト名ヘッダーにあるものに基づいて、Siteオブジェクトを動的に選択します。それを達成するための正しい方法ではないことを暗示していますか? – knorv

+0

'Host'ヘッダは要求があるまで来ません。これは定義上、実行時に発生します。 –

+0

それは明らかです。私は、サイトフレームワークがsettings.SITE_ID(これは明らかにハードコードされています)を無視し、代わりに "Host"ヘッダーにあるものに基づいてSiteオブジェクトを動的に取得することを意味します。毎時サイトを追加したり削除したりするので、私はDjangoプロジェクトを各サイトに設定したくありません。これはDjangoで解決可能な問題ですか?もしそうなら、それを達成する最良の方法は何ですか? – knorv

関連する問題