我使用django.contrib.messages
模块创建刷新消息。这些消息可以显示在页面上的不同块中,取决于额外的标记:
messages.error(request, 'Error message', extra_tags='form')
我有一个名为'global'的默认标签,如果没有设置extra_tags,我需要在新邮件中添加它。所以我编写了中间件来在应用程序启动时包装django.contrib.messages.add_message()
方法:
class Initialization:
def __init__(self):
self.init_messages()
raise MiddlewareNotUsed
def init_messages(self):
add_message_method = messages.add_message
def add_message_wrapper(request, level, message, extra_tags='', fail_silently=False):
if not extra_tags:
extra_tags = 'global'
add_message_method(request, level, message, extra_tags, fail_silently)
messages.add_message = add_message_wrapper
我看到init_messages()
方法被调用,但是当我调用django.contrib.messages.add_message()
时,它没有被add_message_wrapper()
包裹。
我的失败在哪里?
答案 0 :(得分:1)
你不能只是添加"启动代码"进入settings.py
或views.py
代替?
如果您只是在"global"
为空时添加默认值extra_tags
,那么您也可以在呈现邮件时在页面模板中执行此操作:
{% if not message_obj.tags %}
// Use "global"
{% else %}
// Use {{message_obj.tags}}
{% endif %}
这也可以在您的视图代码中完成:
storage = messages.get_messages(request)
for message in storage:
if not message.tags:
message.tags = "global"
storage.used = False
有关详情https://docs.djangoproject.com/en/dev/ref/contrib/messages/#expiration-of-messages
,请参阅Django文档