【问题标题】:Django Subdomains using django-subdomains package使用 django-subdomains 包的 Django 子域
【发布时间】:2014-12-15 21:17:48
【问题描述】:

我正在使用django-subdomains package 创建子域。问题是,无论我如何配置 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',
}

...



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)),
)



myapp/views.py

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

def index(Request):
    return HttpResponse("Hello world.")



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)),
)



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!")

【问题讨论】:

  • 您是否将subdomains.middleware.SubdomainURLRoutingMiddleware 添加到您的中间件配置中?
  • 是的,我的 MIDDLEWARE_CLASSES 里面确实有这个。
  • 什么是'myapptwo.test'?尝试使用“myapptwo.urls”。子域需要指向每个子域的url配置。

标签: python django subdomain middleware


【解决方案1】:

django-subdomains docs 中所述,子域中间件应位于 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',
)

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 2016-12-18
    • 1970-01-01
    • 2015-09-19
    • 2013-01-07
    • 2012-07-17
    • 2015-12-18
    • 2013-06-12
    • 1970-01-01
    相关资源
    最近更新 更多