Django子域名使用django-subdomains包

Ben*_*nji 5 python django subdomain middleware

我正在使用django-subdomains包来创建子域.问题是无论我如何配置SUBDOMAIN_URLCONFS,网站总是指向我在ROOT_URLCONF中放置的任何内容作为默认值.任何关于我正在做错误的见解都将非常感激!

编辑:添加了MIDDLEWARE_CLASSES


mysite的/ settings.py

...

MIDDLEWARE_CLASSES = (
    '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',
    'subdomains.middleware.SubdomainURLRoutingMiddleware',
)

...

ROOT_URLCONF = 'mysite.urls'

SUBDOMAIN_URLCONFS = {
    None: 'mysite.urls',
    'www': 'mysite.urls',
    'myapp': 'myapptwo.test',
}

...
Run Code Online (Sandbox Code Playgroud)



mysite的/ urls.py

from django.conf.urls import patterns, include, url
from myapp import views
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^admin/', include(admin.site.urls)),
)
Run Code Online (Sandbox Code Playgroud)



MYAPP/views.py

from django.shortcuts import render
from django.http import HttpResponse

def index(Request):
    return HttpResponse("Hello world.")
Run Code Online (Sandbox Code Playgroud)



myapptwo/urls.py

from django.conf.urls import patterns, include, url
from myapptwo import views
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^admin/', include(admin.site.urls)),
)
Run Code Online (Sandbox Code Playgroud)



myapptwo/views.py

from django.shortcuts import render
from django.http import HttpResponse

def index(Request):
    return HttpResponse("Hello world. This is the myapptwo subdomain!")
Run Code Online (Sandbox Code Playgroud)

xbl*_*itz 4

正如django-subdomains 文档中所述,子域中间件应该出现在 CommonMiddleware 之前

将 subdomains.middleware.SubdomainURLRoutingMiddleware 添加到 Django 设置文件中的 MIDDLEWARE_CLASSES 中。如果您使用 django.middleware.common.CommonMiddleware,则子域中间件应位于 CommonMiddleware 之前。

所以你的设置应该是这样的:

MIDDLEWARE_CLASSES = (
    'subdomains.middleware.SubdomainURLRoutingMiddleware',
    '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',
)
Run Code Online (Sandbox Code Playgroud)