私の質問は、単一の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のように、自分のタスクに本番サーバーを試してみる必要があるかもしれません。