Python 当用户尝试访问应用程序时加载特定设置(多应用程序django)
我有一个django项目和几个应用程序。每个数据库都链接到不同的数据库,并且可能具有不同的设置。我在apache中使用mod_wsgi。 实际上,我遵循的是找到的方法之一:读取一个.ini文件 当用户尝试访问我的应用程序时,如何加载该应用程序特有的settings.ini? 我可以在我的settings.py中加载/读取特定的settings.ini,它工作正常。我只想加载/读取用户请求的应用程序的settings.ini 如何知道应用程序提供正确的加载路径?(通过URL?) 请参见我的简化项目树:Python 当用户尝试访问应用程序时加载特定设置(多应用程序django),python,django,settings,Python,Django,Settings,我有一个django项目和几个应用程序。每个数据库都链接到不同的数据库,并且可能具有不同的设置。我在apache中使用mod_wsgi。 实际上,我遵循的是找到的方法之一:读取一个.ini文件 当用户尝试访问我的应用程序时,如何加载该应用程序特有的settings.ini? 我可以在我的settings.py中加载/读取特定的settings.ini,它工作正常。我只想加载/读取用户请求的应用程序的settings.ini 如何知道应用程序提供正确的加载路径?(通过URL?) 请参见我的简化项目
├── 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
│ └── ...
在My 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
...
有什么建议吗 应用程序没有也不能有单独的设置。如果您需要这样做(我必须说这听起来是个坏主意),您将需要单独的项目,每个项目都有自己的settings.py,并且每个项目都由Apache中自己的虚拟服务器提供服务。您试图做的事情听起来有点。。。关我同意丹尼尔·罗斯曼的观点。如果你在寻求建议,听他的。但是如果你想让这一切顺利进行,这里有一个想法:你可以通过一个mixin从一个视图中实现这一点,该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