相关疑难解决方法(0)

Django - 让中间件与视图/模板进行通信

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

middleware.py

from django.conf import settings

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

views.py

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

def myview(request):
    return HttpResponse(settings.my_var)
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我不确定它是"Django方式"还是"Python方式".

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

python django

7
推荐指数
2
解决办法
8237
查看次数

标签 统计

django ×1

python ×1