gpt4 book ai didi

django - 将变量从中间件传递给模板

转载 作者:行者123 更新时间:2023-12-02 06:57:06 27 4
gpt4 key购买 nike

我是 Django 初学者。到目前为止,我学习了从 View 到模板的传递变量。但是现在我需要将变量传递给我的主布局。我可以在每个页面的定义中传递它。但它的重复太多了。所以我开始学习中间件。

我创建了 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 文件,该方法返回一个包含您需要的信息的字典,然后使用您的示例在项目设置中将路由添加到该文件:

在您的应用程序上创建一个文件 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

在 settings.py 中添加上下文处理器
TEMPLATE_CONTEXT_PROCESSORS = (
# ...
'myapp.context_proccessors.my_context',
)

您可以在任何模板中使用“变量”:
<p>Count: {{ notification_count }}</p>

关于django - 将变量从中间件传递给模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29159621/

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