我正在尝试使用django-subdomains app 在我的Django项目中配置子域.
这些是我采取的步骤:
这是我的settings.py
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '*********************************************'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# …Run Code Online (Sandbox Code Playgroud) 我的项目需要有多个子域。每个子域代表某个公司。例如:company1.myproject.io、company2.myproject.io。我使用django-hosts库来设置子域。
主机文件:
127.0.0.1 localhost
127.0.0.1 myproject.io
127.0.0.1 www.myproject.io
127.0.0.1 company1.myproject.io
127.0.0.1 company2.myproject.io
Run Code Online (Sandbox Code Playgroud)
设置.py:
ROOT_URLCONF = 'core.urls'
ROOT_HOSTCONF = 'core.hosts'
DEFAULT_HOST = 'www'
DEFAULT_REDIRECT_URL = "http://www.myproject.io:8000"
Run Code Online (Sandbox Code Playgroud)
核心/主机.py:
from hostsconf import urls as redirect_urls
host_patterns = [
host(r'www', settings.ROOT_URLCONF, name='www'),
host(r'(?!www).*', redirect_urls, name='wildcard'),
]
Run Code Online (Sandbox Code Playgroud)
hostsconf/urls.py:
from .views import wildcard_redirect
urlpatterns = [
url(r'^(?P<path>.*)', wildcard_redirect)
]
Run Code Online (Sandbox Code Playgroud)
hostsconf/views.py:
DEFAULT_REDIRECT_URL = getattr(settings, "DEFAULT_REDIRECT_URL", "http://www.myproject.io:8000")
def wildcard_redirect(request, path=None):
new_url = DEFAULT_REDIRECT_URL
if path is not None:
new_url = DEFAULT_REDIRECT_URL + "/" + path
return …Run Code Online (Sandbox Code Playgroud)