【问题标题】:Load specific settings when user try to acces to an app (multi app django)当用户尝试访问应用程序时加载特定设置(多应用程序 django)
【发布时间】:2013-09-10 15:58:06
【问题描述】:

我有一个包含多个应用程序的 django 项目。每个都链接到不同的数据库,并且可能具有不同的设置。我将 mod_wsgi 与 apache 一起使用。 实际上,我正在遵循here 找到的一种方法:读取 .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
...

有什么建议吗?

【问题讨论】:

标签: python django settings


【解决方案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

我还没有尝试过这个......因为它太疯狂了。

【讨论】:

  • 我们知道这不是我们应该做的事情......我们已经和我的团队讨论过,我想我们会听从 Daniel Roseman 的建议。感谢您的回答。
【解决方案2】:

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

【讨论】:

  • 我们知道这不是我们应该做的事情......我们已经与我的团队讨论过,我想我们会听从您的建议。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多