Я пробовал использовать dbsettings (а также его более новую версию на github), и они полезны - но слишком тяжелы для моих нужд.Вместо этого я реализовал более простой метод.Я сделал это с помощью JSONField (из Postgres 9.3) - но вы могли бы предпочесть использовать TextField (используйте max_length = 1000 или что-то подобное), поскольку людям проще объяснить, как вводить строку вместо JSON:
1) Сначала создайте свою собственную модель настроек (возможно, в core / models.py):
class Setting(models.Model):
"""
Model for site-wide settings.
"""
name = models.CharField(max_length=200, help_text="Name of site-wide variable")
value = JSONField(null=True, blank=True, help_text="Value of site-wide variable that scripts can reference - must be valid JSON")
def __unicode__(self):
return self.name
2) Затем добавьте интерфейс администратора (в core / admin.py):
class SettingAdmin(admin.ModelAdmin):
list_display = ['name', 'value']
admin.site.register(Setting, SettingAdmin)
3) Создайте и запустите миграцию:
python manage.py schemamigration core --auto
python manage.py migrate core
4) Добавьте к началу base.html:
<script type="text/javascript">
//Auto-exported site-wide settings
{% autoescape off %}var site_settings = {{ settings|safe|default:"{}" }};{% endautoescape %}
</script>
5) Создайте «инжектор», который добавляеткод для каждого запроса (вероятно, в core / contextprocessors.py)
from models import Setting
import json
def app_settings(request):
"""Global values to pass to templates"""
settings_dict = dict()
settings = dict()
for obj in Setting.objects.all():
settings[obj.name] = obj.value
settings_dict['settings'] = json.dumps(settings)
return settings_dict
5) Затем добавьте процессоры контекста на ваш сайт settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
...,
'<yourapp>.core.contextprocessors.app_settings',
)
6) Войдите в системусвою страницу администратора через браузер и создайте настройку:
http://yoursite/admin/core/setting/
Add a new setting, something like:
cell_status_colors
with a value of:
["green","red"] (note this has to be valid JSON, so use quotes around strings)
or:
daily_header
with a value of:
{"text":"Tomorrow only, free shipping!"}
7) И наконец, каждый из ваших файлов javascript должен иметь возможность вызывать их через стандартный JS:
var colors = site_settings.cell_status_colors || ["green","red"];
var msg_text = site_settings.daily_header || {"text":""};