Django 中的上下文是啥?

Posted

技术标签:

【中文标题】Django 中的上下文是啥?【英文标题】:What is a context in Django?Django 中的上下文是什么? 【发布时间】:2014-01-24 07:04:47 【问题描述】:

我是 django 初学者,所以我试图理解上下文和上下文处理器的概念。

什么是上下文,为什么要使用它? 为了在模板中使用,上下文是您需要提供的值吗? 上下文和上下文处理器是否相同?

我会非常感谢您的回复。提前致谢!

【问题讨论】:

@JosephVictorZammit 您的链接没有提及上下文 |||改为查看 --> docs.djangoproject.com/en/2.0/intro/tutorial03 【参考方案1】:

当您使用 Django 模板时,它会被编译一次(并且仅一次)并存储以供将来使用,作为优化。模板可以在双花括号中包含变量名,例如 myvar1 myvar2

Context 是一个字典,变量名作为 key,变量的值作为 value。因此,如果您的上述模板的上下文如下所示:myvar1: 101, myvar2: 102,当您将此上下文传递给模板渲染方法时, myvar1 将替换为 101 myvar2 替换为您的模板中的 102。这是一个简单的例子,但真正的 Context 对象是在其中呈现模板的 context

对于 ContextProcessor,这是一个稍微高级的概念。您可以在settings.py 文件中列出一些上下文处理器,它们接收HttpRequest 对象并返回一个字典(类似于上面的上下文对象)。上下文处理器返回的字典(上下文)被 Django 合并到你(用户)传入的上下文中。

上下文处理器的一个用例是您总是想在模板中插入某些变量(例如,用户的位置可能是候选者)。您可以简单地为它编写一个上下文处理器并将其添加到settings.py 中的TEMPLATE_CONTEXT_PROCESSORS 设置中,而不是编写代码将其插入每个视图中。

希望这是有道理的。感谢您上课!

【讨论】:

非常感谢希德!我非常感谢您的帮助和您的时间!你澄清了我对此的怀疑。我上你的课是因为我正在为我的想法构建 MVP。所以我完成了它并阅读了“两勺 django”,但是有很多概念我还是不太明白。在下面的答案中,我扩展了我试图用这个特定的应用程序做的事情。【参考方案2】:

上下文是传递给模板的变量名 -> 变量值映射。

上下文处理器让您可以自动指定在每个上下文中设置的多个变量——您无需在每个render() 打电话。

【讨论】:

【参考方案3】:

Context 在the official documentation 中有很好的描述。简而言之:

    在日常使用中,主要是间接使用,因为helper functions 为您构造了Context

    见1.:只有当你使用the low-level api时才需要它

    不,context processor 是一个函数,它接受一个请求并返回一个变量字典,然后这些变量在使用 RequestContext 呈现的所有模板中都可用,例如:

    def get_stuff_from_session(request):
        return 'stuff': request.session['stuff']
    

【讨论】:

以上是关于Django 中的上下文是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的上下文到底是啥? [复制]

Java中的上下文到底是啥? [复制]

Jinja2 中的上下文是啥?

_.each(list, iterator, [context]) 中的上下文是啥?

工具的真正目的是啥:Android XML 中的上下文

Apache Kafka 上下文中的“重新平衡”是啥意思?