我正在尝试使用django-subdomains应用程序在Django项目中配置子域。

这些是我采取的步骤:

  • 使用pip安装了django子域。
  • 在我的MIDDLEWARE中添加了'subdomains.middleware.SubdomainURLRoutingMiddleware',仅
  • 在我的设置中添加了SITE_ID,并且还配置了SUBDOMAIN_URLCONF

  • 这是我的设置。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',
    
        # My application
        'myapp',
    ]
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
    
        # Sub-domains Middleware
        'subdomains.middleware.SubdomainURLRoutingMiddleware',
    
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    ROOT_URLCONF = 'mysite.urls'
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'mysite.wsgi.application'
    
    
    # Database
    # https://docs.djangoproject.com/en/1.10/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    
    # Password validation
    # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
    
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    
    # Internationalization
    # https://docs.djangoproject.com/en/1.10/topics/i18n/
    
    LANGUAGE_CODE = 'en-us'
    
    TIME_ZONE = 'UTC'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/1.10/howto/static-files/
    
    STATIC_URL = '/static/'
    
    
    # Sub-domains
    
    SITE_ID = 1
    
    SUBDOMAIN_URLCONF = {
         None: 'mysite.urls',
        'www': 'mysite.urls',
        'blog': 'mysite.urls.blog',
        'shop': 'mysite.urls.shop'
    }
    

    我也将其作为 mysite.urls.py :

    从django.conf.urls导入URL,包括
    从django.contrib导入管理员
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
    
        # My application URL
        url(r'^', include('myapp.urls', namespace='myapp'))
    ]
    

    无论如何,我正在使用此 View 测试整个过程:
    def index(request):
        return HttpResponse(request.subdomain)
    

    运行命令python manage.py runserver时,出现标题错误。我的控制台中的完整回溯可以在这里找到:

    Pastebin Link
    Unhandled exception in thread started by <function wrapper at 0x1026ad2a8>
    Traceback (most recent call last):
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
        fn(*args, **kwargs)
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 142, in inner_run
        handler = self.get_handler(*args, **options)
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/contrib/staticfiles/management/commands/runserver.py", line 27, in get_handler
        handler = super(Command, self).get_handler(*args, **options)
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 64, in get_handler
        return get_internal_wsgi_application()
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/servers/basehttp.py", line 49, in get_internal_wsgi_application
        return import_string(app_path)
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/utils/module_loading.py", line 20, in import_string
        module = import_module(module_path)
      File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
        __import__(name)
      File "/Users/user/mysite/mysite/wsgi.py", line 16, in <module>
        application = get_wsgi_application()
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
        return WSGIHandler()
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 153, in __init__
        self.load_middleware()
      File "/Users/user/mysite/myvenv/lib/python2.7/site-packages/django/core/handlers/base.py", line 82, in load_middleware
        mw_instance = middleware(handler)
    TypeError: object() takes no parameters
    

    我究竟做错了什么?我是否缺少安装步骤?任何帮助表示赞赏!

    最佳答案

    使用MIDDLEWARE_CLASSES而不是MIDDLEWARE对我有效。

    关于python - TypeError : object() has no parameters using Django-subdomains,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38897320/

    10-11 02:16
    查看更多