我有一个带有几个app的django项目。每个都链接到不同的数据库,可能有不同的设置。我使用mod_wsgi和apache。 实际上,我正在遵循找到的here方法之一:读取.ini文件。
当用户尝试访问我的应用时,如何加载特定于我的应用的settings.ini?
我可以在settings.py中加载/读取特定的settings.ini,它运行正常。我想加载/只读取用户请求的app的settings.ini。
如何知道应用提供正确的加载路径? (通过网址?)
请参阅我的简化项目树:
├── django.wsgi
├── manage.py
├── global
│ ├── __init__.py
│ ├── settings.py
│ ├── wsgi.py
├── my_app1
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── settings.ini
│ └── ...
├── my_app2
│ ├── admin.py
│ ├── __init__.py
│ ├── models.py
│ ├── settings.ini
│ └── ...
我的具体设置文件在我的setting.py:
的顶部读取import configparser
config = configparser.ConfigParser()
config.read('/path/to/my/settings.ini')
DEBUG = config['debug']['DEBUG']
TEMPLATE_DEBUG = config['debug']['TEMPLATE_DEBUG']
...
我的settings.ini看起来像这样:
[debug]
DEBUG = True
TEMPLATE_DEBUG = DEBUG
...
有什么建议吗?
答案 0 :(得分:1)
你要做的事听起来有点......关闭。我同意丹尼尔罗斯曼的观点。如果您正在寻找建议,请听取他的意见。但是,如果你一直想尝试做这项工作,这里有一个想法:你可以从一个调用settings.configure()的mixin的视图中做到这一点:
from os
from django.conf import settings
import configparser
class DynamicSettingsViewMixin(object):
def dispatch(self, request, *args, **kwargs):
config = configparser.ConfigParser()
config.read(os.path.join(os.path.dirname(__file__), 'settings.ini'))
settings.configure(**config['debug'])
return super(DynamicSettingsViewMixin, self).dispatch(request, *args, **kwargs)
class MyAwesomeAppView(DynamicSettingsViewMixin, TemplateView):
pass
我没有尝试过这个......因为它很疯狂。
答案 1 :(得分:0)
应用不会,并且无法进行单独设置。如果您需要这样做(我必须说这听起来像个坏主意),您将需要单独的项目,每个项目都有自己的settings.py,并且每个项目都由Apache自己的虚拟服务器提供服务。