Ger*_*tod 2 django variables middleware
我是Django入门者。到目前为止,我了解了从视图到模板的传递变量。但是现在我需要将变量传递到主布局。我可以在每个页面的定义中传递它。但是它有太多重复。因此,我开始学习中间件。
我创建了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')
Run Code Online (Sandbox Code Playgroud)
您可以创建一个模板上下文处理器,首先使用一个方法创建一个python文件,该方法返回包含所需信息的字典,然后使用示例,在您的项目设置中添加到该文件的路由:
在您的应用上创建文件context_processors.py:
from myapp.models import MyModel
def my_context(request):
context_data = dict()
context_data['notification_count'] = MyModel.objects.all().count()
return context_data
Run Code Online (Sandbox Code Playgroud)
在您的settings.py中添加上下文处理器
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
'myapp.context_proccessors.my_context',
)
Run Code Online (Sandbox Code Playgroud)
您可以在任何模板中使用“变量”:
<p>Count: {{ notification_count }}</p>
Run Code Online (Sandbox Code Playgroud)