config and manage typed extra settings using just the django admin.
pip install django-extra-settings
extra_settings
to settings.INSTALLED_APPS
python manage.py migrate
python manage.py collectstatic
create
, update
and delete
your settings.All these settings are optional, if not defined in settings.py
the default values (listed below) will be used.
# the name of the installed app for registering the extra settings admin. EXTRA_SETTINGS_ADMIN_APP = "extra_settings"
# the name of the cache to use, if not found the "default" cache will be used. EXTRA_SETTINGS_CACHE_NAME = "extra_settings"
# a list of settings that will be available by default, each item must contain "name", "type" and "value". # check the #types section to see all the supported settings types. EXTRA_SETTINGS_DEFAULTS = [ { "name": "SETTING_NAME", "type": "string", "value": "Hello World", }, # ... ]
# if True, settings names will be forced to honor the standard django settings format EXTRA_SETTINGS_ENFORCE_UPPERCASE_SETTINGS = True
# if True, the template tag will fallback to django.conf.settings, # very useful to retrieve conf settings such as DEBUG. EXTRA_SETTINGS_FALLBACK_TO_CONF_SETTINGS = True
# the upload_to path value of settings of type 'file' EXTRA_SETTINGS_FILE_UPLOAD_TO = "files"
# the upload_to path value of settings of type 'image' EXTRA_SETTINGS_IMAGE_UPLOAD_TO = "images"
# if True, settings name prefix list filter will be shown in the admin changelist EXTRA_SETTINGS_SHOW_NAME_PREFIX_LIST_FILTER = False
# if True, settings type list filter will be shown in the admin changelist EXTRA_SETTINGS_SHOW_TYPE_LIST_FILTER = False
# the package name displayed in the admin EXTRA_SETTINGS_VERBOSE_NAME = "Settings"
Warning
When using Celery's autodiscover_tasks
with force=True
, it triggers an aggressive task discovery that accesses Django settings before they're fully initialized. This premature access prevents django-extra-settings
from properly setting up its default configuration values. More info here.
You can display the settings model admin in another installed app group by using the EXTRA_SETTINGS_ADMIN_APP
setting.
You can also have a more advanced control, by registering the settings admin with multiple installed apps and filtering each app settings using the queryset_processor
argument.
Admin advanced configuration exampleโ ๏ธ If you do either of the above, you must run migrations for each app that will display
extra_settings
model admin in its admin (because django creates migrations even for proxy models).
In your custom app photos.admin
module:
from extra_settings.admin import register_extra_settings_admin register_extra_settings_admin( app=__name__, queryset_processor=lambda qs: qs.filter(name__istartswith="PHOTOS_"), unregister_default=True, )
In your custom app videos.admin
module:
from extra_settings.admin import register_extra_settings_admin register_extra_settings_admin( app=__name__, queryset_processor=lambda qs: qs.filter(name__istartswith="VIDEOS_"), unregister_default=True, )
By default the "extra_settings"
app has its own admin app group.
You can customise the app caching options using settings.CACHES["extra_settings"]
setting, otherwise the "default"
cache will be used:
CACHES = { # ... "extra_settings": { "BACKEND": "django.core.cache.backends.locmem.LocMemCache", "TIMEOUT": 60, }, # ... }
By default the "extra_settings"
cache is used, if you want to use another cache you can set it using the EXTRA_SETTINGS_CACHE_NAME
setting.
You can create, read, update and delete settings programmatically:
This is the list of the currently supported setting types you may need to use:
Setting.TYPE_BOOL
Setting.TYPE_DATE
Setting.TYPE_DATETIME
Setting.TYPE_DECIMAL
Setting.TYPE_DURATION
Setting.TYPE_EMAIL
Setting.TYPE_FILE
Setting.TYPE_FLOAT
Setting.TYPE_IMAGE
Setting.TYPE_INT
Setting.TYPE_JSON
Setting.TYPE_STRING
Setting.TYPE_TEXT
Setting.TYPE_TIME
Setting.TYPE_URL
from extra_settings.models import Setting setting_obj = Setting( name="SETTING_NAME", value_type=Setting.TYPE_STRING, value="django-extra-settings", ) setting_obj.save()
from extra_settings.models import Setting value = Setting.get("SETTING_NAME", default="django-extra-settings")
from extra_settings.models import Setting setting_obj = Setting( name="SETTING_NAME", value_type=Setting.TYPE_BOOL, value=True, ) setting_obj.value = False setting_obj.save()
from extra_settings.models import Setting Setting.objects.filter(name="SETTING_NAME").delete()
You can define a custom validator for each setting:
myapp.mymodule.my_validator
.True
, otherwise returning False
or None
a ValidationError
is raised.You can retrieve settings in templates:
{% load extra_settings %} {% get_setting 'SETTING_NAME' default='django-extra-settings' %}
You can override specific settings during tests using extra_settings.test.override_settings
.
It can be used both as decorator and as context-manager:
from extra_settings.test import override_settings # decorator @override_settings(SETTING_NAME_1="value for testing 1", SETTING_NAME_2="value for testing 2") def test_with_custom_settings(self): pass # context manager def test_with_custom_settings(self): with override_settings(SETTING_NAME_1="value for testing 1", SETTING_NAME_2="value for testing 2"): pass
# clone repository git clone https://github.com/fabiocaccamo/django-extra-settings.git && cd django-extra-settings # create virtualenv and activate it python -m venv venv && . venv/bin/activate # upgrade pip python -m pip install --upgrade pip # install requirements pip install -r requirements.txt -r requirements-test.txt # install pre-commit to run formatters and linters pre-commit install --install-hooks # run tests tox # or python runtests.py # or python -m django test --settings "tests.settings"
Released under MIT License.
django-admin-interface
- the default admin interface made customizable by the admin itself. popup windows replaced by modals. ๐ง โก
django-cache-cleaner
- clear the entire cache or individual caches easily using the admin panel or management command. ๐งนโจ
django-colorfield
- simple color field for models with a nice color-picker in the admin. ๐จ
django-maintenance-mode
- shows a 503 error page when maintenance-mode is on. ๐ง ๐ ๏ธ
django-redirects
- redirects with full control. โช๏ธ
django-treenode
- probably the best abstract model / admin for your tree based stuff. ๐ณ
python-benedict
- dict subclass with keylist/keypath support, I/O shortcuts (base64, csv, json, pickle, plist, query-string, toml, xml, yaml) and many utilities. ๐
python-codicefiscale
- encode/decode Italian fiscal codes - codifica/decodifica del Codice Fiscale. ๐ฎ๐น ๐ณ
python-fontbro
- friendly font operations. ๐งข
python-fsutil
- file-system utilities for lazy devs. ๐งโโ๏ธ
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4