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 中的上下文是啥?的主要内容,如果未能解决你的问题,请参考以下文章