2012-05-10 5 views
4

ロケーション固有のコンテンツを提供できるようにアプリケーションを設定することに興味があります。django subdomains a la craigslist.com

miami.craigslist.orgはmiamiの投稿をみているようなものです。

私はCityフィールドを持つモデルを持っていると仮定すると、これを達成する最良の方法は何でしょうか?

答えて

5

BanjerはSitesフレームワークを提案しましたが、あなたの状況に100%完璧にフィットしない可能性があります。サイトフレームワークは、同じデータベースを共有する異なるサイトでうまく機能します。しかし、あなたのケースでは、すべての同じサイトと基本的には、都市のあなたの意見に引数を渡したいだけです。
https://docs.djangoproject.com/en/1.4/ref/request-response/#django.http.HttpRequest.get_host

ドメインがなかったので、場合:「ロサンゼルス

はおそらく、自分のDjangoサイトにワイルドカード*.domain.comをポイントし、[サブドメインを解析するためのビューでrequest.get_host()を使用して、さらに簡単に何かを行うことができます。 domain.com "を探し、" losangeles "を解析したら、あなたの都市の"タグ "としてクエリに使うことができます。新しいコンテンツを作成するときは、都市でタグ付けするだけです。

Post.objects.filter(city_tag="losangeles") 

あなたのサイトに必要な「場所」構造の堅牢性に依存すると思います。tagフィールドを含む様々なメタデータフィールドを持つCityモデルである可能性があります。次に、それを外部キーとしてコンテンツに関連付けます。これは、サイトフレームワークと同じ一般的な考え方に近いアプローチですが、この場合は実際には異なるサイトを作成しているわけではありません。

+0

私がこの方法をとることに決めたら、都市に依存した複数のビューがある可能性があります...サイトにサブドメインを前処理して、すべてのモデルをすべてのビューでフィルタリングする必要はありますか? – AlexBrand

+1

@alexBrand:ミドルウェアのサブドメインを解析し、セッションにアタッチすることを検討します。それはあなたのurls.pyファイルを少なくともシンプルにするでしょう。これをモデル上のフィルタに自動的に追加することは、グローバル変数のようなものだと感じています。これらは便利なこともありますが、デバッグを隠す(Hidden Actor)こともあります。あなたがそのルートに行くなら、その次の貧しい人がそのサイトで働くように、その鼻孔を文書化してください。 :-) –

+0

mod_rewriteを使用してcity.site.comをsite.com/cityに誘導したいですか?それは別のアイデアです – AlexBrand

1

"sites" frameworkをチェックしてください。組み込みのDjango管理者を使用したことがあるなら、おそらくexample.comがデフォルトでリストされている唯一のサイトであるサイトセクションを見たことでしょう。

現実世界の例で、私は提供されたリンクから:複数のサイト

Djangoで作らサイトLJWorld.comとLawrence.comでコンテンツを関連付ける

が 同じ報道機関によって運営されています - ローレンス・ジャーナル・ワールドの新聞 ローレンス、カンザス州。 Lawrence.com は地元の娯楽に焦点を当てていますが、LJWorld.comはニュースに焦点を当てています。しかし、編集者によっては、両方のサイトで記事 を公開したいことがあります。

この問題を解決するには、サイト のプロデューサーに、同じ記事を2回、LJWorld.comで1回、Lawrence.comで にもう一度公開する必要があります。しかし、これはサイト制作者にとっては非効率的であり、 データベースに同じストーリーの複数のコピーを格納することは冗長です。

より良い解決策は簡単です:どちらのサイトも同じ記事記事 を使用し、記事は1つ以上のサイトに関連付けられています。

だからではなく、市場 は、あなたは基本的に、あなたの都市のすべてが使用1つのデータベースを持っているサイトのためのモデル、例えば:

sites = models.ManyToManyField(Site) 

にフィールドを追加すると思います。便利ですが、私はそれが道路をどのようにスケールダウンするのだろうと思っています。私は自分自身で同様のプロジェクトを開始しており、Djangoサイトのフレームワークを使用してプロジェクトを地面から離れさせます。私は、データベースの人からもっとスケーラブルなソリューションについて聞いてみたいと思っています。

関連する問題