gpt4 book ai didi

django - 用于 View 相关导航/显示的中间件与上下文处理器

转载 作者:行者123 更新时间:2023-12-04 04:38:12 24 4
gpt4 key购买 nike

这是一个与 middleware and views communicating 上的 SO 线程非常相似的问题。

我们希望为我们的模板提供一组标准的上下文变量。因此,上下文处理器似乎是合适的,但是,上下文处理器似乎不是 View 感知的。我们以前被迫检查调用堆栈以获取有关哪个 View 正在做什么的上下文信息。

这就是我们看到中间件线程以及 process_view() 的地方。为我们提供 View 句柄的中间件的签名。

这似乎更接近我们的需求,但不允许我们修改上下文变量,其他中间件方法也不允许。

所以我们最初的想法是使用模板所需的所有全局和上下文信息修改请求对象,并强制模板从 {{request.something}} 调用。对于我们需要的具体信息,如{{request.viewname}} .

所以,我们的问题:

  • 修改/设置请求对象的值是否可以将上下文/全局应用程序特定信息推送到您的模板?还是标准做法总是将其置于上下文中?
  • 是否有方法/技巧可以让上下文处理器查看不涉及显式传递它或进行一些堆栈自省(introspection)?
  • middleware.process_response有机会修改上下文还是不可变的?
  • 最佳答案

    在中间件中为请求设置变量是完全有效的——我一直这样做。

    没办法使用process_response为此,此时模板已经被渲染——此时你得到的只是一个 HttpResponse包含一堆 HTML。

    另一种方法可能是包装 render_to_response使用您自己的函数,该函数获取上下文以及请求和模板,并在移交给实际的渲染函数之前根据需要对其进行修改。这具有修改实际上下文的优点,但缺点是您必须实际记住在每个 View 中调用它而不是默认函数。

    关于django - 用于 View 相关导航/显示的中间件与上下文处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278954/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com