【问题标题】:Pass a variable from custom settings into a Django view将自定义设置中的变量传递到 Django 视图中
【发布时间】:2017-04-30 06:28:17
【问题描述】:

我知道如何访问设置模块(详见here),但我有许多扩展settings.py 的自定义设置模块,我不确定如何在我的视图中访问它。它在我的模板中可用,但我在设置中找不到有关如何访问它的任何信息。 os.environ["DJANGO_SETTINGS_MODULE"] 正确返回了我的预期设置模块的字符串,但由于它只是一个字符串,它上面没有我的变量。

custom_settings1.py

from settings import *  # noqa: F403

SITE_ID = 1
SITE_NAME = "MY SITE"

【问题讨论】:

  • 您包含的副本准确显示了如何访问视图中的设置.. 什么不起作用?
  • @sayse 我可以从settings.py 得到东西没问题,但不能从扩展它的模块。
  • 您应该展示这个“扩展”设置的模块。很难说出你的意思。
  • 您是否尝试访问模板中的设置?
  • @Brobin 在我看来。它已经在我的模板中正常工作了。

标签: python django


【解决方案1】:

要在视图中使用设置,只需按照引用的帖子中的方式导入即可。

def settings_view(request):
    from django.conf import settings
    context = { 
        'settings': settings
    }
    return render(request, 'template.html', context)

在你的模板中:

My setting is {% settings.my_setting %}

【讨论】:

    【解决方案2】:

    在我的项目中,我使用自定义上下文处理器将设置变量注入到我的模板中。这样您就不必将其添加到每个视图函数/类的上下文中。

    # app/context.py
    from django.conf import settings
    
    
    def my_settings(request):
        return { 'MY_CUSTOM_SETTING': settings.MY_CUSTOM_SETTING }
    

    然后将其添加到 TEMPLATE 设置中的上下文处理器中。

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    ...
                    'app.context.my_settings',
                ],
            },
        },
    ]
    

    现在可以在任何模板中使用!

    {{ MY_CUSTOM_SETTING }}
    

    【讨论】:

      【解决方案3】:

      远非“常见用例”,您的做法完全错误。

      几乎总是,您将直接在 settings.py 中定义自定义设置;这样它们就会被添加到您执行from django.conf import settings 时获得的对象中。

      有时您可能希望在单独的模块中定义设置;在这种情况下,您将它们从那里导入到主 settings.py,而不是像您拥有它们那样反过来。

      settings.py 是设置的规范位置。

      【讨论】:

      • 我们网站的不同部分使用不同的设置文件,所以我不太确定它会如何工作。
      • 但这没有意义。设置是项目范围的。我怀疑您正在使用不适合的设置。
      • 我曾经以这种方式使用它们的每一项工作,我都曾为大型知名行业工作过。那好吧;我会想办法的。
      • 恐怕我根本看不到那个链接的相关性。
      猜你喜欢
      • 2011-09-10
      • 2019-07-24
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2020-10-16
      相关资源
      最近更新 更多