django中间件设置用户特殊全局变量

发布于 2024-10-02 13:21:18 字数 396 浏览 1 评论 0原文

如果每个网页都有用户新消息通知(新消息计数,如消息(1)),我如何将变量“{new_message_count:1}”传递给每个视图 我想使用中间件:

class page_variable():
def process_request(self, request):
    # put the variable to the request or response so can used in template variable
    return None

模板看起来像:

<a href="/message/">new <em>({{ new_message_count }})</em></a>

if every web page has a user new message notice(new message count, like message(1)), how can i pass variable '{ new_message_count: 1}' to every view
i want to using middleware:

class page_variable():
def process_request(self, request):
    # put the variable to the request or response so can used in template variable
    return None

and template look like:

<a href="/message/">new <em>({{ new_message_count }})</em></a>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

勿挽旧人 2024-10-09 13:21:18

已经有一个内置的 消息传递框架 可以为您处理所有这些事情。

但是,假设您确实想推出自己的产品,则无法将内容从中间件传递到上下文中。您可以将其附加到request对象,然后可以在视图或模板中使用该对象,或者添加一个上下文处理器,该处理器从请求中获取变量并将其添加到上下文。

There's already a built-in messaging framework that handles all of this for you.

However, assuming you really want to roll your own, you can't pass things into the context from middleware. You can attach it to the request object, which you can then use in your view or template, or add a context processor which takes the variable from the request and adds it into the context.

小耗子 2024-10-09 13:21:18

在 django 的开发版本中,您可以在渲染之前从中间件编辑模板上下文:

class MessageCountMiddleware:
    def process_template_response(self, request, response):
        response.context['new_message_count'] = message_count(request.user)

在 Django 1.2 中,您可以创建自定义上下文处理器:

def add_message_count(request):
    return { 'new_message_count': message_count(request.user) }

并在设置中注册它

TEMPLATE_CONTEXT_PROCESSORS += [ 'my_project.content_processors.add_message_count' ]

In the development version of django, you can edit template context from a middleware before rendering:

class MessageCountMiddleware:
    def process_template_response(self, request, response):
        response.context['new_message_count'] = message_count(request.user)

In Django 1.2 you can create a custom context processor:

def add_message_count(request):
    return { 'new_message_count': message_count(request.user) }

and register it in settings

TEMPLATE_CONTEXT_PROCESSORS += [ 'my_project.content_processors.add_message_count' ]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文