当用户尝试访问应用程序时加载特定设置(多应用程序django)

时间:2013-09-10 15:58:07

标签: python django settings

我有一个带有几个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
...

有什么建议吗?

2 个答案:

答案 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自己的虚拟服务器提供服务。