gpt4 book ai didi

python - Django - 让中间件与 View /模板通信

转载 作者:太空狗 更新时间:2023-10-29 21:12:40 25 4
gpt4 key购买 nike

好吧,这可能是一个非常愚蠢的问题,但我是 Python/Django 的新手,所以我还不能真正理解它的范围概念。现在我正在写一个 middleware类来处理一些东西,我想设置我的 View 和模板可以访问的“全局”变量。这样做的“正确”方法是什么?我考虑过做这样的事情:

中间件.py
from django.conf import settings

class BeforeFilter(object):
def process_request(self, request):
settings.my_var = 'Hello World'
return None

View .py
from django.conf import settings
from django.http import HttpResponse

def myview(request):
return HttpResponse(settings.my_var)

虽然这可行,但我不确定这样做是“Django 方式”还是“Python 方式”。

所以,我的问题是:
1. 这样做对吗?
2.如果是正确的方法,那么从中间件中添加可以在实际模板中使用的变量的正确方法是什么?假设我想评估一些东西,我想在中间件中将变量 headername 设置为“我的站点名称”,我希望能够执行 {{ headername }} 在所有模板中。按照我现在的方式进行操作,我必须将 headername 添加到每个 View 内的上下文中。反正有绕过这个吗?我正在考虑 CakePHP 的 $this->set('headername','My Site Name');
3. 我正在使用中间件类作为 CakePHP 的 beforeFilter 的等价物,它在调用每个 View (或 CakePHP 中的 Controller )之前运行。这是正确的做法吗?
4. 完全不相关但这是一个小问题,将变量内容打印到浏览器 ala print_r 的好方法是什么?假设我想查看传递到 View 中的 request 中的所有内容? pprint 是答案吗?

最佳答案

  1. 这不是最好的方法。您可以根据请求而不是设置设置 my_var。设置是全局的,适用于整个站点。您不想为每个请求修改它。多个请求同时更新/读取变量可能会出现并发问题。

  2. 要在您的模板中访问 request.my_var,您可以执行 {{ request.my_var }}。要访问模板中的请求变量,您必须将 django.core.context_processors.request 添加到您的 TEMPLATE_CONTEXT_PROCESSORS 设置。

  3. 是的。描述请求中间件的其他术语是请求预处理器/过滤器/拦截器。

此外,如果您想在模板中为 header 使用通用站点名称,您可能需要查看 Django Sites 应用程序,它提供了一个站点名称变量供您使用。

关于python - Django - 让中间件与 View /模板通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/557460/

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