我的网站几乎没有全局配置。例如“smtp-server address”,“公司地址”等
我当然可以:
settings.py
中创建变量并在模板和应用中使用它; Configuration
)并在那里写下所有需要的字段。如果我使用第一种方式,则无法在django-admin中提供更改此字段的权限。
如果我使用秒方式它不是一个漂亮的解决方案,因为代码中的每个地方我都会使用model_name.objects.get(id=1)
而我只需要一个实例。模型是为另一个任务创建的。
我该如何解决这个问题?
答案 0 :(得分:6)
这就是我所做的。可能不是最理想的解决方案,但对我有用。
创建一个配置模型并按照您的要点执行所有常用操作2.创建一个函数(例如在configuration.view
中),它将拉出并返回dict中的配置值。
现在在settings.py
中,导入您的函数并将返回的dict设置为settings.py
变量:
CONFIG = configuration.view.get_config()
创建模板上下文处理器,在模板上下文中设置此CONFIG
dict。
def init_site_settings(request):
return settings.CONFIG
将此上下文处理器添加到TEMPLATE_CONTEXT_PROCESSORS
现在,您可以将模板中的配置参数用作{{my_config_key}}
希望这有帮助。
答案 1 :(得分:3)
看看http://www.djangopackages.com/grids/g/live-setting/ 来自我的类似问题Changing Django settings at runtime
关于id = 1表示法,a)您可以在经理https://docs.djangoproject.com/en/dev/topics/db/managers/#adding-extra-manager-methods上定义相应的属性 b)是的,它仍然是一个数据库查询 - 结账https://github.com/disqus/django-modeldict/,用于延迟访问和缓存的方法。
答案 2 :(得分:0)
对于你的选项2,硬编码的id = 1很糟糕,直接使用get()。因此你可以使用:
get_conf = lambda: model_name.objects.get()
还有其他需求的应用,例如http://bitbucket.org/bkroeze/django-livesettings/。你可能想检查一下。