2011-01-06 4 views
4

私は密接に関連した2つのサイト、メインサイトとモバイルサイトをdjangoアプリケーションとしてホストしています。彼らは同じ機能をたくさん持ち、同じデータにアクセスする必要があります。主な違いは、テンプレートが異なり、サイトの構造が異なることです。90%のデータとコードを共有する2つのdjangoサイトを作成する

私は2つの別々の仮想ホストを1つずつ持っています(私はそうする必要はありませんが)。私の最初の考えは、Djangoサイトのフレームワークがこれを解決するのに役立つが、ドキュメントは私のユースケースを記述していないようだった。

私は正しい道にいるかどうかを誰かに知らせることができますか? urls.pyは異なっている必要があります。たとえば、ホームページはアプリ間で完全に異なるからです。主な目的は、2つの異なるアプリのデータを共有し、管理するコードを複製する必要がないことです。メインのサイトから

  • ユーザーがモバイルサイトからモデルに格納されている項目

を提出:

  • ユーザーは、項目のリストを見て、見ただいま主サイトに入っています
  • ユーザーは、最近追加した商品の5しました。

メインのサイトから:

  • ユーザーが高く評価さ項目のリストを見て、(今高い評価を持っている)最近追加された項目がリストに表示されます。

答えて

1

OK、どちらの回答も素晴らしいですし、最終的な解決策として私が選んだものに貢献しました。

settings.pyファイルには、ROOT_URLCONFというオプションがあります。私は2つの設定を作成しました。PY settings_desktop.pyとsettings_mobile.pyと呼ばれるファイル、およびこれらの使用次のコードのそれぞれに:

from settings.py import * 

ROOT_URLCONF = 'myapp.urls_mobile' 

(またはデスクトップの場合は、myapp.urls_desktop)

これは実際に多くを与えます本当に私はそれをするつもりはないが、サイトごとに異なるテンプレートディレクトリを使用できるというようなクールな機能があります。

そして私は唯一の違いは、このラインたWSGIファイルの2つのバージョンの作成:唯一の違いは、そのWSGIScriptAlias線である仮想ホストのそれぞれにおいて

os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings_mobile' 

又は

を各ホストの異なるwsgiファイルを指します。

これにより、両方のサイトに簡単に対応できる1つのdjangoアプリを効果的に使用することができました。

この問題を解決するお手伝いをいただきありがとうございます。

4

this answer to a similar questionをご覧ください。基本的には、同じビューを使用するだけで、ユーザーエージェントに基づいて異なるテンプレートを返すことができます。 また、アプリケーションロジックをdjangoの用語で異なる「アプリケーション」に分割するように構造化すると、同様のコンポーネントと異なるフローが必要な場合に再利用することができます。 うまくいけば、これはあなたをオフにして実行します。

UPDATE:

ですから、メインのサイトのためのあなたの機能を作るそれ自身のurls.pyのmodels.pyやviews.pyを持っているあなたのメインサイトhttp://www.mainsite.com/を持って言うことができます。それからあなたはhttp://www.m.mainsite.com/を持っています。それはそれ自身のURLとビューのセットです。次に、メインサイトのモデルをインポートし、モバイルサイトビューで使用するだけです。

+0

コメントのおかげで、これは質問の重要な部分を解決しません。私は本当に同じページの異なるレンダリングだけでなく、異なるビューにユーザーを送るために異なるurls.pyを持つ必要があります。 – newz2000

+0

私の答えの2番目の部分は、私がそれに取り組んでいたものでした。私はあなたの尋ねているようなもので私の答えを更新し、あなたが探しているものかどうかを見ることができます。 –

+0

私はちょうどあなたの質問を読んで、私はあなたが探していると思いますあなたのアプリを介してモデルを共有することです。 –

0

私は一度よく似たようなことをしました。複数のurls.pyのこの問題を解決する私のやり方は、次のようなものでした:

2つのurlconfを1つのサイトごとに作成します。

新しいミドルウェア作成:patch_vary_headers on the docsをしなければならない理由も

from django.utils.cache import patch_vary_headers 

class DomainMiddleware: 

    def __init__(self): 
     pass 

    def process_request(self, request): 

     #avoid problems when reaching the server directly trough IP 
     host = request.META.get('HTTP_HOST', None) 
     if host is None: return 

     host = host.split(':')[0] #remove port number 

     if host is mobile: 
      urlconf = "mobile.urls" 
     else: 
      urlconf = "default.urls" 

     request.urlconf = urlconf 

    def process_response(self, request, response): 
     patch_vary_headers(response, ('Host',)) 
     return response 

チェックを。

関連する問題