===================
.. image:: https://circleci.com/gh/SmileyChris/django-easysettings.svg?style=svg :alt: Build status :target: https://circleci.com/gh/SmileyChris/django-easysettings
.. image:: https://codecov.io/gh/SmileyChris/django-easysettings/branch/master/graph/badge.svg :alt: Coverage status :target: https://codecov.io/gh/SmileyChris/django-easysettings
Easy app-specific settings for Django apps.
Provides a method for using a declarative class for an app's default settings.
The instance of this class can be used to access all project settings in place
of django.conf.settings
.
.. contents:: :local: :backlinks: none
To install, run: pip install django-easysettings
Create a conf.py
file within your app's directory, adding attributes for
the default values of your app-specific settings. They will be overridden by
any project setting that is provided.
For example:
.. code:: python
from easysettings.app import AppSettings
class Settings(AppSettings):
MYAPP_FRUIT = 'Apple'
settings = Settings()
Then in your app, rather than from django.conf import settings
, use
from myapp.conf import settings
. For example:
.. code:: python
from myapp.conf import settings
def dashboard(request):
context = {}
context['fruit'] = settings.MYAPP_FRUIT
if settings.DEBUG:
context['debug_mode'] = True
# ...
A common pattern is to use a dictionary as a namespace for all an app's
settings, such as settings.MYAPP['settings']
.
Easy-settings handles this fine, overriding any keys provided in the project while still having access to the default app settings keys.
You can also use a subclass of an AppSettings
class to set up a dictionary.
.. code:: python
from easysettings.apps import AppSettings
class MyAppSettings(AppSettings):
"""
MyApp settings
"""
#: Preferred fruit
FRUIT = 'Apple'
#: Preferred drink
DRINK = 'Water'
class Settings(AppSettings):
MYAPP = MyAppSettings
settings = Settings()
If previously your app used a common prefix (like MYAPP_
) you
can still support projects that still use these stand-alone legacy settings
while moving to a MYAPP
dictionary for your settings.
.. code:: python
from easysettings.legacy import LegacyAppSettings
class Settings(LegacyAppSettings):
MYAPP = {'FRUIT': 'Apple'}
settings = Settings()
If a project uses settings like MYAPP_FRUIT = 'Banana'
they will continue
to work. As soon as a project switches to MYAPP
, any MYAPP_*
settings
will be ignored.
While the legacy app settings class is used, the dictionary settings can still
be accessed via the prefixed setting (for example, settings.MYAPP_FRUIT
).
==========
Full rework of project! Import is now
from easysettings.app import AppSettings
(but left importable from
easysettings
for better backwards compatibility).
Removed isolated settings functionality, unnecessary with a separate settings
module for tests and/or use of the TestCase.settings()
context manager.
Added easysettings.legacy.LegacyAppSettings
for providing backwards
compatibility for prefixed project settings when moving settings to a
dictionary rather than individual settings with the same prefix.
Version | Tag | Published |
---|---|---|
2.0.1 | 3yrs ago | |
2.0 | 4yrs ago | |
1.1 | 5yrs ago | |
1.0.2 | 7yrs ago |