Move to Django 1.5, reorg settings.
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 20 Mar 2013 15:51:58 +0000 (16:51 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Wed, 20 Mar 2013 15:51:58 +0000 (16:51 +0100)
29 files changed:
project_name/localsettings.py.default [deleted file]
project_name/localsettings.py.dev [new file with mode: 0644]
project_name/settings.d/10-paths.py [deleted file]
project_name/settings.d/20-basic.py [deleted file]
project_name/settings.d/30-apps.py [deleted file]
project_name/settings.d/30-locale.py [deleted file]
project_name/settings.d/40-auth.py [deleted file]
project_name/settings.d/40-context.py [deleted file]
project_name/settings.d/40-logging.py [deleted file]
project_name/settings.d/40-middleware.py [deleted file]
project_name/settings.d/50-contrib.py [deleted file]
project_name/settings.d/50-static.py [deleted file]
project_name/settings.d/60-custom.py [deleted file]
project_name/settings.py [deleted file]
project_name/settings/__init__.py [new file with mode: 0644]
project_name/settings/apps.py [new file with mode: 0644]
project_name/settings/auth.py [new file with mode: 0644]
project_name/settings/basic.py [new file with mode: 0644]
project_name/settings/context.py [new file with mode: 0644]
project_name/settings/contrib.py [new file with mode: 0644]
project_name/settings/custom.py [new file with mode: 0644]
project_name/settings/locale.py [new file with mode: 0644]
project_name/settings/logging.py [new file with mode: 0644]
project_name/settings/middleware.py [new file with mode: 0644]
project_name/settings/paths.py [new file with mode: 0644]
project_name/settings/static.py [new file with mode: 0644]
project_name/urls.py
project_name/wsgi.py
requirements.txt

diff --git a/project_name/localsettings.py.default b/project_name/localsettings.py.default
deleted file mode 100644 (file)
index 5eb05b6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-DEBUG = True
-ADMINS = MANAGERS = [
-    ('Admin', 'admin@example.com'),
-]
-EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
-
-if False:
-    INSTALLED_APPS += ('debug_toolbar',)
-    MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
-    INTERNAL_IPS = ('127.0.0.1',)
diff --git a/project_name/localsettings.py.dev b/project_name/localsettings.py.dev
new file mode 100644 (file)
index 0000000..303bfd7
--- /dev/null
@@ -0,0 +1,12 @@
+DEBUG = True
+ADMINS = MANAGERS = [
+    ('Admin', 'admin@example.com'),
+]
+EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
+
+if False:
+    INSTALLED_APPS += ('debug_toolbar',)
+    MIDDLEWARE_CLASSES += ('debug_toolbar.middleware.DebugToolbarMiddleware',)
+    INTERNAL_IPS = ('127.0.0.1',)
+
+SECRET_KEY = 'secret_key'
diff --git a/project_name/settings.d/10-paths.py b/project_name/settings.d/10-paths.py
deleted file mode 100644 (file)
index b3ef304..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-from os import path
-
-PROJECT_DIR = path.dirname(path.abspath(path.dirname(__file__)))
diff --git a/project_name/settings.d/20-basic.py b/project_name/settings.d/20-basic.py
deleted file mode 100644 (file)
index 0bb3896..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-DEBUG = False
-TEMPLATE_DEBUG = DEBUG
-
-DATABASES = {
-    'default': {
-        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
-        'NAME': path.join(PROJECT_DIR, 'dev.db'),                      # Or path to database file if using sqlite3.
-        'USER': '',                      # Not used with sqlite3.
-        'PASSWORD': '',                  # Not used with sqlite3.
-        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
-        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
-    }
-}
-
-SITE_ID = 1
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
-    'django.template.loaders.filesystem.Loader',
-    'django.template.loaders.app_directories.Loader',
-#     'django.template.loaders.eggs.Loader',
-)
-
-ROOT_URLCONF = '{{ project_name }}.urls'
-
-# Python dotted path to the WSGI application used by Django's runserver.
-WSGI_APPLICATION = '{{ project_name }}.wsgi.application'
-
-TEMPLATE_DIRS = (
-    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
-    # Always use forward slashes, even on Windows.
-    # Don't forget to use absolute paths, not relative paths.
-)
diff --git a/project_name/settings.d/30-apps.py b/project_name/settings.d/30-apps.py
deleted file mode 100644 (file)
index 903d857..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-INSTALLED_APPS = (
-    '{{ project_name }}',
-    'fnpdjango',
-    'south',
-    'pipeline',
-    # Disable, if not using Piwik.
-    'piwik.django',
-    # Disable, if not using CAS.
-    'django_cas',
-
-    'django.contrib.auth',
-    'django.contrib.contenttypes',
-    'django.contrib.sessions',
-    'django.contrib.sites',
-    'django.contrib.messages',
-    'django.contrib.staticfiles',
-    'django.contrib.admin',
-    'django.contrib.admindocs',
-)
diff --git a/project_name/settings.d/30-locale.py b/project_name/settings.d/30-locale.py
deleted file mode 100644 (file)
index d77583d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# -*- coding: utf-8 -*-
-
-LANGUAGES = (
-    ('pl', u'polski'),
-#    ('en', u'English'),
-)
-
-# Local time zone for this installation. Choices can be found here:
-# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
-# although not all choices may be available on all operating systems.
-# On Unix systems, a value of None will cause Django to use the same
-# timezone as the operating system.
-# If running in a Windows environment this must be set to the same as your
-# system time zone.
-TIME_ZONE = None
-
-# Language code for this installation. All choices can be found here:
-# http://www.i18nguy.com/unicode/language-identifiers.html
-LANGUAGE_CODE = 'pl'
-
-# If you set this to False, Django will make some optimizations so as not
-# to load the internationalization machinery.
-USE_I18N = True
-
-# If you set this to False, Django will not format dates, numbers and
-# calendars according to the current locale.
-USE_L10N = True
-
-# If you set this to False, Django will not use timezone-aware datetimes.
-USE_TZ = True
diff --git a/project_name/settings.d/40-auth.py b/project_name/settings.d/40-auth.py
deleted file mode 100644 (file)
index 675db9d..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-if 'django_cas' in INSTALLED_APPS:
-    AUTHENTICATION_BACKENDS = (
-        'django.contrib.auth.backends.ModelBackend',
-        'django_cas.backends.CASBackend',
-    )
diff --git a/project_name/settings.d/40-context.py b/project_name/settings.d/40-context.py
deleted file mode 100644 (file)
index e161e0b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-TEMPLATE_CONTEXT_PROCESSORS = tuple(x for x in (
-    "django.contrib.auth.context_processors.auth"
-            if "django.contrib.auth" in INSTALLED_APPS else None,
-    "django.core.context_processors.debug",
-    "django.core.context_processors.i18n",
-    "django.core.context_processors.media",
-    "django.core.context_processors.static",
-    "django.core.context_processors.tz",
-    "django.contrib.messages.context_processors.messages"
-            if 'django.contrib.messages' in INSTALLED_APPS else None,
-    "django.core.context_processors.request"
-) if x is not None)
diff --git a/project_name/settings.d/40-logging.py b/project_name/settings.d/40-logging.py
deleted file mode 100644 (file)
index 3d91c9c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# A sample logging configuration. The only tangible logging
-# performed by this configuration is to send an email to
-# the site admins on every HTTP 500 error when DEBUG=False.
-# See http://docs.djangoproject.com/en/dev/topics/logging for
-# more details on how to customize your logging configuration.
-LOGGING = {
-    'version': 1,
-    'disable_existing_loggers': False,
-    'filters': {
-        'require_debug_false': {
-            '()': 'django.utils.log.RequireDebugFalse'
-        }
-    },
-    'handlers': {
-        'mail_admins': {
-            'level': 'ERROR',
-            'filters': ['require_debug_false'],
-            'class': 'django.utils.log.AdminEmailHandler'
-        }
-    },
-    'loggers': {
-        'django.request': {
-            'handlers': ['mail_admins'],
-            'level': 'ERROR',
-            'propagate': True,
-        },
-    }
-}
diff --git a/project_name/settings.d/40-middleware.py b/project_name/settings.d/40-middleware.py
deleted file mode 100644 (file)
index b211d42..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-MIDDLEWARE_CLASSES = tuple(x for x in (
-    'django.contrib.sessions.middleware.SessionMiddleware'
-            if "django.contrib.sessions" in INSTALLED_APPS else None,
-    #'django.middleware.locale.LocaleMiddleware',
-    'fnpdjango.middleware.URLLocaleMiddleware',
-
-    'django.middleware.common.CommonMiddleware',
-    'django.middleware.csrf.CsrfViewMiddleware',
-    'django.contrib.auth.middleware.AuthenticationMiddleware'
-            if "django.contrib.auth" in INSTALLED_APPS else None,
-    'django_cas.middleware.CASMiddleware'
-            if "django_cas" in INSTALLED_APPS else None,
-    'django.contrib.messages.middleware.MessageMiddleware'
-            if "django.contrib.messages" in INSTALLED_APPS else None,
-    'piwik.django.middleware.PiwikMiddleware'
-            if "piwik.django" in INSTALLED_APPS else None,
-    # Uncomment the next line for simple clickjacking protection:
-    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'pagination.middleware.PaginationMiddleware'
-            if "pagination" in INSTALLED_APPS else None,
-    'fnpdjango.middleware.SetRemoteAddrFromXRealIP'
-) if x is not None)
diff --git a/project_name/settings.d/50-contrib.py b/project_name/settings.d/50-contrib.py
deleted file mode 100644 (file)
index 2210cf1..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-CAS_SERVER_URL = 'http://logowanie.nowoczesnapolska.org.pl/cas/'
-CAS_VERSION = '1'
diff --git a/project_name/settings.d/50-static.py b/project_name/settings.d/50-static.py
deleted file mode 100644 (file)
index 770ad98..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-MEDIA_ROOT = path.join(PROJECT_DIR, 'media/')
-MEDIA_URL = '/media/'
-STATIC_ROOT = path.join(PROJECT_DIR, 'static/')
-STATIC_URL = '/static/'
-
-STATICFILES_FINDERS = (
-    'django.contrib.staticfiles.finders.FileSystemFinder',
-    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
-#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
-)
-
-STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
-PIPELINE_CSS_COMPRESSOR = None
-PIPELINE_JS_COMPRESSOR = None
-PIPELINE_CSS = {
-    'base': {
-        'source_filenames': (
-          'css/base.scss',
-        ),
-        'output_filename': 'compressed/base.css',
-    },
-}
-PIPELINE_JS = {
-    'base': {
-        'source_filenames': (
-        ),
-        'output_filename': 'compressed/base.js',
-    },
-}
-
-PIPELINE_COMPILERS = (
-  'pipeline.compilers.sass.SASSCompiler',
-)
-
-PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'
diff --git a/project_name/settings.d/60-custom.py b/project_name/settings.d/60-custom.py
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/project_name/settings.py b/project_name/settings.py
deleted file mode 100644 (file)
index e9b77f0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-import os.path
-import glob
-
-conffiles = glob.glob(os.path.join(
-    os.path.dirname(__file__), 'settings.d', '*.py'))
-conffiles.sort()
-for f in conffiles:
-    execfile(os.path.abspath(f))
-
-try:
-    execfile(os.path.abspath(os.path.join(
-        os.path.dirname(__file__), 'localsettings.py')))
-except IOError:
-    pass
diff --git a/project_name/settings/__init__.py b/project_name/settings/__init__.py
new file mode 100644 (file)
index 0000000..8ce1902
--- /dev/null
@@ -0,0 +1,18 @@
+from .paths import *
+from .basic import *
+from .apps import *
+from .locale import *
+from .auth import *
+from .context import *
+from .middleware import *
+from .static import *
+from .logging import *
+from .contrib import *
+from .custom import *
+
+
+# Load localsettings, if they exist
+try:
+    from ..localsettings import *
+except ImportError:
+    pass
diff --git a/project_name/settings/apps.py b/project_name/settings/apps.py
new file mode 100644 (file)
index 0000000..903d857
--- /dev/null
@@ -0,0 +1,19 @@
+INSTALLED_APPS = (
+    '{{ project_name }}',
+    'fnpdjango',
+    'south',
+    'pipeline',
+    # Disable, if not using Piwik.
+    'piwik.django',
+    # Disable, if not using CAS.
+    'django_cas',
+
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'django.contrib.admin',
+    'django.contrib.admindocs',
+)
diff --git a/project_name/settings/auth.py b/project_name/settings/auth.py
new file mode 100644 (file)
index 0000000..91b062e
--- /dev/null
@@ -0,0 +1,8 @@
+from . import INSTALLED_APPS
+
+
+if 'django_cas' in INSTALLED_APPS:
+    AUTHENTICATION_BACKENDS = (
+        'django.contrib.auth.backends.ModelBackend',
+        'django_cas.backends.CASBackend',
+    )
diff --git a/project_name/settings/basic.py b/project_name/settings/basic.py
new file mode 100644 (file)
index 0000000..65bfd83
--- /dev/null
@@ -0,0 +1,37 @@
+from os import path
+from . import PROJECT_DIR
+
+
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': path.join(PROJECT_DIR, 'dev.db'),                      # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
+        'PASSWORD': '',                  # Not used with sqlite3.
+        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
+
+SITE_ID = 1
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.Loader',
+    'django.template.loaders.app_directories.Loader',
+#     'django.template.loaders.eggs.Loader',
+)
+
+ROOT_URLCONF = '{{ project_name }}.urls'
+
+# Python dotted path to the WSGI application used by Django's runserver.
+WSGI_APPLICATION = '{{ project_name }}.wsgi.application'
+
+TEMPLATE_DIRS = (
+    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
+    # Always use forward slashes, even on Windows.
+    # Don't forget to use absolute paths, not relative paths.
+)
diff --git a/project_name/settings/context.py b/project_name/settings/context.py
new file mode 100644 (file)
index 0000000..ec4ef61
--- /dev/null
@@ -0,0 +1,15 @@
+from . import INSTALLED_APPS
+
+
+TEMPLATE_CONTEXT_PROCESSORS = tuple(x for x in (
+    "django.contrib.auth.context_processors.auth"
+            if "django.contrib.auth" in INSTALLED_APPS else None,
+    "django.core.context_processors.debug",
+    "django.core.context_processors.i18n",
+    "django.core.context_processors.media",
+    "django.core.context_processors.static",
+    "django.core.context_processors.tz",
+    "django.contrib.messages.context_processors.messages"
+            if 'django.contrib.messages' in INSTALLED_APPS else None,
+    "django.core.context_processors.request"
+) if x is not None)
diff --git a/project_name/settings/contrib.py b/project_name/settings/contrib.py
new file mode 100644 (file)
index 0000000..2210cf1
--- /dev/null
@@ -0,0 +1,2 @@
+CAS_SERVER_URL = 'http://logowanie.nowoczesnapolska.org.pl/cas/'
+CAS_VERSION = '1'
diff --git a/project_name/settings/custom.py b/project_name/settings/custom.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/project_name/settings/locale.py b/project_name/settings/locale.py
new file mode 100644 (file)
index 0000000..d77583d
--- /dev/null
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+
+LANGUAGES = (
+    ('pl', u'polski'),
+#    ('en', u'English'),
+)
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = None
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'pl'
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+
+# If you set this to False, Django will not format dates, numbers and
+# calendars according to the current locale.
+USE_L10N = True
+
+# If you set this to False, Django will not use timezone-aware datetimes.
+USE_TZ = True
diff --git a/project_name/settings/logging.py b/project_name/settings/logging.py
new file mode 100644 (file)
index 0000000..3d91c9c
--- /dev/null
@@ -0,0 +1,28 @@
+# A sample logging configuration. The only tangible logging
+# performed by this configuration is to send an email to
+# the site admins on every HTTP 500 error when DEBUG=False.
+# See http://docs.djangoproject.com/en/dev/topics/logging for
+# more details on how to customize your logging configuration.
+LOGGING = {
+    'version': 1,
+    'disable_existing_loggers': False,
+    'filters': {
+        'require_debug_false': {
+            '()': 'django.utils.log.RequireDebugFalse'
+        }
+    },
+    'handlers': {
+        'mail_admins': {
+            'level': 'ERROR',
+            'filters': ['require_debug_false'],
+            'class': 'django.utils.log.AdminEmailHandler'
+        }
+    },
+    'loggers': {
+        'django.request': {
+            'handlers': ['mail_admins'],
+            'level': 'ERROR',
+            'propagate': True,
+        },
+    }
+}
diff --git a/project_name/settings/middleware.py b/project_name/settings/middleware.py
new file mode 100644 (file)
index 0000000..80ffc44
--- /dev/null
@@ -0,0 +1,25 @@
+from . import INSTALLED_APPS
+
+
+MIDDLEWARE_CLASSES = tuple(x for x in (
+    'django.contrib.sessions.middleware.SessionMiddleware'
+            if "django.contrib.sessions" in INSTALLED_APPS else None,
+    #'django.middleware.locale.LocaleMiddleware',
+    'fnpdjango.middleware.URLLocaleMiddleware',
+
+    'django.middleware.common.CommonMiddleware',
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware'
+            if "django.contrib.auth" in INSTALLED_APPS else None,
+    'django_cas.middleware.CASMiddleware'
+            if "django_cas" in INSTALLED_APPS else None,
+    'django.contrib.messages.middleware.MessageMiddleware'
+            if "django.contrib.messages" in INSTALLED_APPS else None,
+    'piwik.django.middleware.PiwikMiddleware'
+            if "piwik.django" in INSTALLED_APPS else None,
+    # Uncomment the next line for simple clickjacking protection:
+    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
+    'pagination.middleware.PaginationMiddleware'
+            if "pagination" in INSTALLED_APPS else None,
+    'fnpdjango.middleware.SetRemoteAddrFromXRealIP'
+) if x is not None)
diff --git a/project_name/settings/paths.py b/project_name/settings/paths.py
new file mode 100644 (file)
index 0000000..b3ef304
--- /dev/null
@@ -0,0 +1,3 @@
+from os import path
+
+PROJECT_DIR = path.dirname(path.abspath(path.dirname(__file__)))
diff --git a/project_name/settings/static.py b/project_name/settings/static.py
new file mode 100644 (file)
index 0000000..cc17ecc
--- /dev/null
@@ -0,0 +1,38 @@
+from os import path
+
+
+MEDIA_ROOT = path.join(PROJECT_DIR, 'media/')
+MEDIA_URL = '/media/'
+STATIC_ROOT = path.join(PROJECT_DIR, 'static/')
+STATIC_URL = '/static/'
+
+STATICFILES_FINDERS = (
+    'django.contrib.staticfiles.finders.FileSystemFinder',
+    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
+#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
+)
+
+STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
+PIPELINE_CSS_COMPRESSOR = None
+PIPELINE_JS_COMPRESSOR = None
+PIPELINE_CSS = {
+    'base': {
+        'source_filenames': (
+          'css/base.scss',
+        ),
+        'output_filename': 'compressed/base.css',
+    },
+}
+PIPELINE_JS = {
+    'base': {
+        'source_filenames': (
+        ),
+        'output_filename': 'compressed/base.js',
+    },
+}
+
+PIPELINE_COMPILERS = (
+  'pipeline.compilers.sass.SASSCompiler',
+)
+
+PIPELINE_STORAGE = 'pipeline.storage.PipelineFinderStorage'
index 0d6160f..c579b39 100644 (file)
@@ -24,3 +24,11 @@ if 'django_cas' in settings.INSTALLED_APPS:
         (r'^accounts/login/$', 'django_cas.views.login'),
         (r'^accounts/logout/$', 'django_cas.views.logout'),
     )
+
+# Media in DEBUG mode
+if settings.DEBUG:
+    urlpatterns += patterns('',
+        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
+            'document_root': settings.MEDIA_ROOT,
+        }),
+   )
index b083a0e..f768265 100644 (file)
@@ -15,6 +15,10 @@ framework.
 """
 import os
 
+# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
+# if running multiple sites in the same mod_wsgi process. To fix this, use
+# mod_wsgi daemon mode with each site in its own daemon process, or use
+# os.environ["DJANGO_SETTINGS_MODULE"] = "{{ project_name }}.settings"
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings")
 
 # This application object is used by any WSGI server configured to use this
index 36289aa..7161bde 100644 (file)
@@ -1,6 +1,6 @@
 -i http://pypi.nowoczesnapolska.org.pl/simple
 
-Django>=1.4,<1.5
+Django>=1.5,<1.6
 South>=0.7.4
 django-pipeline>=1.2,<1.3
 piwik