我是 Django 初学者。到目前为止我学到了传递变量view to template。但现在我需要将变量传递到我的主布局。我可以在视图中的每个页面的定义中传递它。但它的重复太多了。于是我开始学习中间件。
我创建了 middlewares.py 并将其包含在设置中。在 middlewares.py 文件中,如何将变量传递到我的主布局?
下面是我当前的middlewares.py内容,我尝试了很多方法并将它们注释掉,因为不起作用。
from django.db import connections
from django.shortcuts import render, redirect
class NotificationsMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
request.context_data['notification_count'] = 2
response = view_func(request, *view_args, **view_kwargs)
return response
# def process_request(self, request):
# request.notification_count = 2
# return
# def process_template_response(self, request, response):
# # response.context['notification_count'] = 2
# response.context_data['notification_count'] = 2
# # return response
# return render(request, 'main/locations.html')
您可以创建一个模板上下文处理器,首先创建一个 python 文件,该文件的方法返回包含您需要的信息的字典,然后使用您的示例在项目设置中将路由添加到此文件:
创建一个文件上下文处理器.py在您的应用程序上:
from myapp.models import MyModel
def my_context(request):
context_data = dict()
context_data['notification_count'] = MyModel.objects.all().count()
return context_data
添加上下文处理器在你的设置.py
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
'myapp.context_proccessors.my_context',
)
您可以在任何模板中使用“变量”:
<p>Count: {{ notification_count }}</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)