【问题标题】:Why can't I include user defined settings as variables in Django templates?为什么我不能将用户定义的设置作为变量包含在 Django 模板中?
【发布时间】:2013-11-27 23:18:23
【问题描述】:

我正在尝试做一些非常愚蠢的事情:在 Django 模板中显示一些设置变量(使用 Django 1.5)。所以,如果我试试这个:

<p>Timezone: {{ TIME_ZONE }}</p>

我得到了我的设置文件中定义的时区。到目前为止,一切都很好。

但是现在,假设我定义了这个新设置:

FOO = 'bar'

然后尝试:

<p>Foo: {{ FOO }}</p>

我看不到变量的值。为什么?

我知道我可以将变量从视图传递给模板,但是如果我想在一个地方为我的项目定义名称和描述并在任何模板中显示它们怎么办?这是我想做的简单任务之一。

这种问题表明我没有正确地做事(意思是正确地“Django 认为应该如何做”),但我不知道为什么。

【问题讨论】:

    标签: django django-templates django-settings


    【解决方案1】:

    您的模板中有一个可用的 TIME_ZONE 变量,因为您在设置中启用了django.core.context_processors.tz 上下文处理器。
    参考:https://docs.djangoproject.com/en/dev/topics/i18n/timezones/#get-current-timezone

    对于其他设置,您需要编写自己的上下文处理器或从视图发送设置值。
    您可以像这样导入项目的设置:from django.conf import settings
    文档建议使用它而不是您的本地设置文件。

    您可以在这里找到详细信息:https://docs.djangoproject.com/en/dev/topics/settings/#using-settings-in-python-code

    【讨论】:

    • 感谢您的回答。这样就解决了问题。但是我有一个疑问:编写上下文处理器是提供用户定义的全局变量以在任何模板中显示的最简单方法吗?除了每次我想显示它时将该变量传递给模板(这听起来并不“优雅”)
    • 好吧,再简单不过了。如果你还没有,请看这里 - docs.djangoproject.com/en/dev/ref/templates/api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2011-04-28
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    • 2018-08-09
    • 2011-03-09
    相关资源
    最近更新 更多