5

私の質問は、単一のDjangoプロジェクトで複数のurls.py(urls1.py、urls2.pyなど)ファイルを提供する方法についてです。

私はWin7x64、django 1.4.1、python 2.7.3を使用しており、サーバーdjangodev-serverツールとして使用しています。
私はグーグルによって見つけた方法を使用することにしました

http://effbot.org/zone/django-multihost.htm

multihost.pyファイルを作成し、djangoミドルウェアフォルダーに配置しました。

C:\python27\Lib\site-packages\django\middleware\multihost.py   

次のコードで:

from django.conf import settings  
from django.utils.cache import patch_vary_headers  

class MultiHostMiddleware:  
def process_request(self, request):  

    try:  
        host = request.META["HTTP_HOST"]  
        if host[-3:] == ":80":  
            host = host[:-3] # ignore default port number, if present  
        request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host]  
    except KeyError:  
        pass # use default urlconf (settings.ROOT_URLCONF)  

def process_response(self, request, response):  
    if getattr(request, "urlconf", None):  
        patch_vary_headers(response, ('Host',))  
    return response  

また、私のプロジェクトsetting.pyファイルに、上記のリンクのようなマッピング辞書を追加しました。

# File: settings.py 

HOST_MIDDLEWARE_URLCONF_MAP = { 

    "mysite1.com": "urls1", 
    #"mysite2.com": "urls2" 

    } 

上記のリンクで説明されているようなエラー処理はまだ実装していません。

私のhostsファイルには次のものが含まれています。

127.0.0.1    mysite1.com  

プロジェクトの構造は次のとおりです。

effbot djangoプロジェクトフォルダー:

 + effbot   
--- settings.py   
--- view.py   
--- wsgi.py   
--- urls.py   
--- urls1.py     

 + objex   
--- models.py   
--- views.py   

 + static   
--- css   
--- images   

テンプレートフォルダはありません。ファイルからhtmlアイテムを提供しないため、それらはdatabsseから取得されます(私の問題がこれにあるとは思えません)。

今問題は:私が住所に行くとき

mysite1.com   

django dev-serverを起動したブラウザーで、サーバーからコード301を取得します。また、ブラウザに「ページを表示できません」というメッセージが表示されます。

上記の方法の使い方を教えてください。私はdjangoを初めて使用し、実際のプロジェクトはまだ行っていません。ドキュメントを読んで、それがどのように機能するかを学ぶために自宅でいくつかのサイトを立ち上げただけです。

urlconfsは着信に依存して呼び出されると思います

request.META["HTTP_HOST"]   


目標は、単一のdjangoプロジェクトでmysite1.comとmysite2.comに異なるurlconfを提供することです。

これはどうにかうまくいくはずだと思います。

フィードバックありがとうございます。

編集:
いくつかの調査の試みの後、私は自分のmultyhost.pyを設定に間違って差し込んだことがわかりました。
修正されました。しかし、それでも同じ結果です。

また、私のdjango dev-serverツールは、「http://127.0.0.1」を実行する場合を除いて、ブラウザー(IE9)からの要求を処理することを反映していないことがわかりました。
nginxのように、自分のタスクに本番サーバーを試してみる必要があるかもしれません。

4

1 に答える 1

2

ドキュメントの例でわかるように、あなたはいないROOT_URLCONFはずです。effbot.urls.py

また、HOST_MIDDLEWARE_URLCONF_MAP反映する必要があるROOT_URLCONFので、`effbotを追加します。このような:

HOST_MIDDLEWARE_URLCONF_MAP = { 
    "mysite1.com": "effbot.urls1", 
    #"mysite2.com": "effbot.urls2" 
} 

もう1つ、別のブラウザ(Chrome、Firefox)で試してみてください。IEで開発サーバーにアクセスするときに問題が発生することがありました。

于 2012-11-29T08:25:48.077 に答える