我想向管理界面公开一些(特定于应用程序的)设置,以便用户可以轻松地更改它们,而不必重新启动 Django。
我该怎么办?
我查看了 http://djangopackages.com/grids/g/live-setting/ 上的应用程序(顺便说一句,django-constance 是最吸引人的),但实际上所有这些应用程序正在做的是将值存储在数据库中,提供一个网络界面来更改它们和缓存。前两个功能不是已经内置在 Django 中了吗?
我看到的最大缺点是,没有一个应用程序可以直接替代这些设置的旧位置(settings.py),并且需要我迁移到它们的符号,并且经常添加另一个上下文处理器来在模板中访问它们.
我不能这样做吗?
从我目前天真的观点来看,我看到的唯一缺点是:
这不是两全其美吗 - 运行时管理(及其所有特权)、数据库后端、缓存以及我的任何设置。USED_TO_BE_IN_SETTINGS_DOT_PY 都不需要任何更改。我是不是错过了什么?
AFAIK,Django 设置应该是不可变的。造成这种情况的原因有多种,最明显的是 Django 不知道服务器的执行模型(预分叉/多线程)。
此外,您无法从 Django 模型加载设置本身,因为需要先加载设置,然后才能使用 ORM 中的任何内容。
所以,基本上,你有两种解决方案:
第一个是令人难以置信的黑客,我不建议这样做。第二种更直接、更干净,但需要你改变平时的习惯(
from django.conf import settings
)。
第二种方法可能是您链接到的第三方应用程序所实现的。
来自 Django 1.8 文档:
DATABASES
是一个字典。所以你可以操纵字典的方式:
import django.conf as conf
conf.settings.DATABASES['default']['NAME'] = 'novo_banco'
看一下:https://bitbucket.org/bkroeze/django-livesettings *Django-Livesettings 是从
Satchmo Project
_ 拆分出来的项目。它提供了通过管理界面配置设置的能力,而不是通过编辑“settings.py”。*
也许对你有帮助。
老实说,当我分析他的代码时,我对 Django 有了更多的了解。在 1.4.5 版本中做到了(按照下面的模块):
我的项目\manage.py
张