Django でマルチドメイン

Django で複数のドメインを構築する方法です。django-hosts を使用すると、Django プロジェクト内でマルチドメインをルーティングして、ドメインごとにアプリケーションを指定できます。

django-hosts

まず pip を使用して、django-hosts をインストールします。

> pip install django-hosts

settings.py

settings.py の INSTALLED_APPS に django_hosts を、MIDDLEWARE に django_hosts.middleware.HostsRequestMiddleware と django_hosts.middleware.HostsResponseMiddleware を追記します。また、ROOT_HOSTCONF と DEFAULT_HOST 環境変数を追記します。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django_hosts',
    ...
]

MIDDLEWARE = [
    'django_hosts.middleware.HostsRequestMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django_hosts.middleware.HostsResponseMiddleware',
]

ROOT_URLCONF = 'config.urls'
ROOT_HOSTCONF = '[プロジェクト名].hosts'
DEFAULT_HOST = '[ルート名]'

hosts.py

プロジェクト名のフォルダー内に hosts.py ファイルを作成し、次の内容を入力して保存します。

from django.conf import settings
from django_hosts import patterns, host

host_patterns = patterns('',
    host('[ドメイン1]', '[アプリケーション名1].urls', name='[ルート名1]'),
    host('[ドメイン2]', '[アプリケーション名2].urls', name='[ルート名2]'),
)

それぞれの行 (ルート) でドメイン名と割り当てたいアプリケーションを記入します。

ここで、settings.py に記入した DEFAULT_HOST のルート名をいずれかの行 (ルート) に入れる必要があります。入っていない場合は、次のエラーが発生します。

Invalid DEFAULT_HOST setting: No host called '[ルート名]' exists

コメントする

メールアドレスが公開されることはありません。