在呈现响应之前删除消息
Remove messages before the response is rendered
我有一个页面,其中包含 2 个表单并允许更新每个表单所附的模型。
我还集成了消息框架,这在很大程度上是完美的。但在发布到此页面后,您会收到两条成功消息,我想在它们的位置显示一条简单的消息。
我尝试了其他问题中建议的各种方法;
Django: Remove message before they are displayed
Deleting/Clearing django.contrib.messages
但是我无法清除消息队列。
def post(self, request, **kwargs):
profile_valid = False
user_valid = False
post_data = request.POST or None
profile_form = self.profile_form_class(
post_data,
instance=request.user.profile,
prefix='profile'
)
user_form = self.user_form_class(
post_data,
instance=request.user,
prefix='user'
)
context = self.get_context_data(
profile_form=profile_form,
user_form=user_form
)
if profile_form.is_valid():
profile_valid = True
self.form_save(profile_form)
if user_form.is_valid():
user_valid = True
self.form_save(user_form)
if profile_valid and user_valid:
# First get the messages from the above save methods
storage = messages.get_messages(request)
for message in storage:
# Need to iterate over the messages to achieve what we need
pass
# Set the messages as used
storage.used = True
# Add our simple message
messages.success(self.request, self.success_message)
return self.render_to_response(context)
我正在使用基于会话的消息存储,但这似乎对视图中的可用内容没有影响。
我正在使用;
- Django 2.2
- Python 3.7
这里的解决方案是遍历加载的消息 & del
每一个;
storage = messages.get_messages(request)
for _ in storage:
# This is important
# Without this loop `_loaded_messages` is empty
pass
for _ in list(storage._loaded_messages):
del storage._loaded_messages[0]
messages.success(self.request, "Details updated")
return self.render_to_response(context)
在呈现的页面上,我看到了 1 条消息,"Details updated"。
这与此处提出的解决方案类似;
我有一个页面,其中包含 2 个表单并允许更新每个表单所附的模型。
我还集成了消息框架,这在很大程度上是完美的。但在发布到此页面后,您会收到两条成功消息,我想在它们的位置显示一条简单的消息。
我尝试了其他问题中建议的各种方法;
Django: Remove message before they are displayed
Deleting/Clearing django.contrib.messages
但是我无法清除消息队列。
def post(self, request, **kwargs):
profile_valid = False
user_valid = False
post_data = request.POST or None
profile_form = self.profile_form_class(
post_data,
instance=request.user.profile,
prefix='profile'
)
user_form = self.user_form_class(
post_data,
instance=request.user,
prefix='user'
)
context = self.get_context_data(
profile_form=profile_form,
user_form=user_form
)
if profile_form.is_valid():
profile_valid = True
self.form_save(profile_form)
if user_form.is_valid():
user_valid = True
self.form_save(user_form)
if profile_valid and user_valid:
# First get the messages from the above save methods
storage = messages.get_messages(request)
for message in storage:
# Need to iterate over the messages to achieve what we need
pass
# Set the messages as used
storage.used = True
# Add our simple message
messages.success(self.request, self.success_message)
return self.render_to_response(context)
我正在使用基于会话的消息存储,但这似乎对视图中的可用内容没有影响。
我正在使用;
- Django 2.2
- Python 3.7
这里的解决方案是遍历加载的消息 & del
每一个;
storage = messages.get_messages(request)
for _ in storage:
# This is important
# Without this loop `_loaded_messages` is empty
pass
for _ in list(storage._loaded_messages):
del storage._loaded_messages[0]
messages.success(self.request, "Details updated")
return self.render_to_response(context)
在呈现的页面上,我看到了 1 条消息,"Details updated"。
这与此处提出的解决方案类似;