skip to navigation
skip to content

django-settings-file 1.0.0

Let Django use settings from an arbitrary Python file instead of an importable module

django-settings-file

Let Django use settings from an arbitrary Python file instead of an importable module.

As per James Pic’s idea posted on the django-developers mailing list.

Usage

  1. Install with pip install django-settings-file.

  2. Edit your manage.py and wsgi.py to swap out Django’s default logic for setting DJANGO_SETTINGS_MODULE to instead do:

    import django_settings_file
    django_settings_file.setup()
    
  3. Add os.environ.setdefault('DJANGO_SETTINGS_FILE', '/path/to/default.py') before the setup() call, unless you can be sure DJANGO_SETTINGS_FILE will always be defined in your environment. You might need to figure out the path relative to your manage.py with some os.path manipulation.

  4. Run it! If DJANGO_SETTINGS_MODULE is defined, it will raise a DjangoSettingsFileError with a message about how only DJANGO_SETTINGS_FILE is allowed now. If DJANGO_SETTINGS_FILE is not defined, it will also fail with a DjangoSettingsFileError with a message about defining it. Otherwise Django should start with the settings!

How it works

django-settings-file imports the contents of the specified file using the import machinery available on your Python version (different logic for 2 and 3) and copies it contents into its own module, which Django sees as the settings file defined via the traditional DJANGO_SETTINGS_MODULE. Nothing about Django is really touched, it’s just a hacky module.

Caveats

  • If the Python file defined by DJANGO_SETTINGS_FILE tries to do any imports, the directory the file is in will not be on PYTHONPATH, so the author of the settings file might get some surprises.
  • Additionally, you might experience other problems from loading a file whilst it’s not on PYTHONPATH.
  • If you want your settings file to extend another one, it will probably find it easiest to import the base one from a location on PYTHONPATH, otherwise it too will have to do use the same import ‘hacks’ to load the default settings.
  • File paths are not portable between operating systems, so you may need logic to support both Unix and Windows at once.
  • DJANGO_SETTINGS_MODULE and DJANGO_SETTINGS_FILE can’t both be used by the same project, since the module is required for the file-based logic. You might be able to allow them both with extra logic, pull requests accepted.
  • ¯\_(ツ)_/¯ - this is kind of unknown territory, this library has not been tested in any real project, just with the example project in the test folder.

History

Pending release

1.0.0 (2017-04-14)

  • First version, supporting DJANGO_SETTINGS_FILE instead of DJANGO_SETTINGS_MODULE
 
File Type Py Version Uploaded on Size
django-settings-file-1.0.0.tar.gz (md5, pgp) Source 2017-04-13 5KB
django_settings_file-1.0.0-py2.py3-none-any.whl (md5, pgp) Python Wheel 2.7 2017-04-13 6KB