Master Settings is a simple Django app to have simple typed settings in django app with type validation.
- Install using pip
$> pip install django-ma-settings
- add 'ma-settings' into INSTALLED_APPS
INSTALLED_APPS = (
# ...
'ma_settings',
# ...
)
- define MASTER_SETTINGS dict with your settings definition
template:
MASTER_SETTINGS = {
'(setting_name)':{
'type' : '(setting_type)',
'display_name': '(displayed name)', #optional
'default': (default value), # optional
'options': (choice options), # optional
'model': (foreign model), # optional, use only when foreign type is chosen
}
}
example:
MASTER_SETTINGS = {
'max_email_size_kb': {
'type': 'integer',
'display_name': 'Max email size(kb)',
'default': 400,
},
'text_color': {
'type': 'choices',
'display_name': 'Text color',
'options': ['White', 'Black', 'Red', 'Blue'],
'default': 'White',
},
'our_rate': {
'type': 'float',
'display_name': 'Our rate',
'default': 1.0,
},
'email_from': {
'type': 'string'
'display_name': 'Email from',
},
'Default client': {
'type': 'foreign',
'model': 'my_app.Client'
}
}
- define BASE_SETTINGS_TEMPLATE_NAME
BASE_SETTINGS_TEMPLATE_NAME = "template_name.html"
# Template file must contain empty {% block settings %}
- in urls.py add include('ma_settings.urls')
url(r'^settings/', include('ma_settings.urls')),
# Use url name 'master_settings_home' to access settings page
{% url 'master_settings_home' %}
- Run commands to initialize settings
$> python manage.py syncdb
$> python manage.py init_settings
To get setting use
from ma_settings import master_settings
master_settings.get('setting_name', default='default')
To set new value:
master_settings.set('setting_name', [value|model_instance])
To check if setting exists:
master_settings.exists('setting_name')
After updating settings definition in settings.py run this command to update settings
python manage.py init_settings