TypeError: object () has no parameters using Django subdomains

I am trying to set up subdomains in a Django project using django-subdomains .

These are the steps I took:

  • Installed django subdomains using pip.
  • Added "subdomains.middleware.SubdomainURLRoutingMiddleware" to my MIDDLEWARE, just b
  • Added SITE_ID to my settings, and also configured SUBDOMAIN_URLCONF

This is my 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', # 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' } 

I also have this as mysite.urls.py :

from django.conf.urls import url, enable from django.contrib import admin

 urlpatterns = [ url(r'^admin/', admin.site.urls), # My application URL url(r'^', include('myapp.urls', namespace='myapp')) ] 

Anyway, I'm testing all of this with this view:

 def index(request): return HttpResponse(request.subdomain) 

When I run the python manage.py runserver , I get an error in the name. The full trace in my console can be found here:

Link Pastebin

 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 

What am I doing wrong? Am I missing a step in my installation? Any help is appreciated!

+5
source share
2 answers

Using MIDDLEWARE_CLASSES for MIDDLEWARE works for me.

+3
source

The problem is that django changed its way, middleware classes work. They expect MiddlewareMixin instead of object . What you can do is create your own middleware with SubdomainURLRoutingMiddleware functionality and have the following:

 try: from django.utils.deprecation import MiddlewareMixin except ImportError: MiddlewareMixin = object class SubdomainMiddleware(MiddlewareMixin): 

instead:

  class SubdomainMiddleware(object): 

Hope that helps

+2
source

All Articles