0

我有一个包含多个应用程序的 django 项目。每个都链接到不同的数据库,并且可能具有不同的设置。我将 mod_wsgi 与 apache 一起使用。实际上,我正在遵循此处找到的一种方法:读取 .ini 文件。

当用户尝试访问它时,如何加载特定于我的应用程序的 settings.ini?

我可以在我的 settings.py 中加载/读取特定的 settings.ini,它工作正常。我只想加载/读取用户请求的应用程序的 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
...

有什么建议吗?

4

2 回答 2

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

我没有试过这个......因为它很疯狂。

于 2013-09-11T00:24:50.110 回答
0

应用程序没有也不能有单独的设置。如果您需要这样做(我必须说这听起来是个坏主意),您将需要单独的项目,每个项目都有自己的 settings.py,并且每个项目都由 Apache 中的自己的虚拟服务器提供服务。

于 2013-09-10T16:10:29.813 回答