为啥我不能将用户定义的设置作为变量包含在 Django 模板中?

Posted

技术标签:

【中文标题】为啥我不能将用户定义的设置作为变量包含在 Django 模板中?【英文标题】: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 认为应该如何做”),但我不知道为什么。

【问题讨论】:

【参考方案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/…

以上是关于为啥我不能将用户定义的设置作为变量包含在 Django 模板中?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的编译防护不能防止多个定义包含?

SPSS13.变量名包含非法的首字符 为啥

为啥我不能直接将 __int64 变量设置为 -2500000000?

问个问题,为啥我定义的static函数能被其他源文件调用。

为啥我不能将具有用户定义参数的方法分配给 c# 中的按钮?

为啥我不能将函数指针作为模板参数传递给地图?