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

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

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

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

【问题讨论】:

标签: django django-templates django-context


【解决方案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】:

    Contextthe official documentation 中有很好的描述。简而言之:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多