Django 删除视图中未显示成功消息
我有一个观点:Django 删除视图中未显示成功消息,django,django-class-based-views,Django,Django Class Based Views,我有一个观点: class LectureDelete(SuccessMessageMixin, DeleteView): model = Lecture success_message = "Die Veranstaltung wurde gelöscht" success_url = '/' def get_object(self): qs = super(LectureDelete, self).get_object() if self.request.user.has_
class LectureDelete(SuccessMessageMixin, DeleteView):
model = Lecture
success_message = "Die Veranstaltung wurde gelöscht"
success_url = '/'
def get_object(self):
qs = super(LectureDelete, self).get_object()
if self.request.user.has_perm('edit_lecture', qs):
return qs
else:
raise exceptions.PermissionDenied
在success_url链接到的模板中,我有以下代码,可以很好地处理其他消息:
{% if messages %}
{% for message in messages %}
<p class="alert alert-dismissable {% if message.tags %}alert-{{ message.tags }}"{% endif %}>
<button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
{{ message }}
</p>
{% endfor %}
{% endif %}
{%if消息%}
{消息%中的消息为%s}
&时代;
{{message}}
{%endfor%}
{%endif%}
但信息没有显示出来。我错过什么了吗?我在干什么?谢谢 似乎您在模板中使用了,但在视图中没有使用 在您的视图中,尝试添加以下成功消息:
from django.contrib import messages
messages.success(request, "Die Veranstaltung wurde gelöscht")
success_message = "Session %(name)s was removed successfully"
class SessionDeleteView(SuccessMessageMixin, DeleteView):
model = Session
success_url = reverse_lazy('session_home')
success_message = "Session %(name)s was removed successfully"
def delete(self, request, *args, **kwargs):
obj = self.get_object()
messages.success(self.request, self.success_message % obj.__dict__)
return super(SessionDeleteView, self).delete(request, *args, **kwargs)
我认为在Django问题追踪者应该回答你的问题
successessagexin
钩住form\u valid
,该表单在DeleteView
上不存在,以将其消息推送到用户
它还为我提供了另一种可行的方法:
from django.views.generic.edit import DeleteView
from django.core.urlresolvers import reverse_lazy
from django.contrib import messages
from .models import Thing
class ThingDelete(DeleteView):
model = Thing
success_url = reverse_lazy('list')
success_message = "Thing was deleted successfully."
def delete(self, request, *args, **kwargs):
messages.success(self.request, self.success_message)
return super(ThingDelete, self).delete(request, *args, **kwargs)
successessagexin
未在删除视图中使用(但我确实在创建和更新视图中使用它)。
希望Django的更高版本会对此有所改进(请参阅以获取更多信息)。基本正确,但没有提供在成功消息中显示字段的解决方案,如下所示:
from django.contrib import messages
messages.success(request, "Die Veranstaltung wurde gelöscht")
success_message = "Session %(name)s was removed successfully"
class SessionDeleteView(SuccessMessageMixin, DeleteView):
model = Session
success_url = reverse_lazy('session_home')
success_message = "Session %(name)s was removed successfully"
def delete(self, request, *args, **kwargs):
obj = self.get_object()
messages.success(self.request, self.success_message % obj.__dict__)
return super(SessionDeleteView, self).delete(request, *args, **kwargs)
只需获取要删除的对象并使用对象的字典格式化字符串,如下所示:
from django.contrib import messages
messages.success(request, "Die Veranstaltung wurde gelöscht")
success_message = "Session %(name)s was removed successfully"
class SessionDeleteView(SuccessMessageMixin, DeleteView):
model = Session
success_url = reverse_lazy('session_home')
success_message = "Session %(name)s was removed successfully"
def delete(self, request, *args, **kwargs):
obj = self.get_object()
messages.success(self.request, self.success_message % obj.__dict__)
return super(SessionDeleteView, self).delete(request, *args, **kwargs)
如果要克服中的异常问题,可以通过以下方式进行更新:
class SessionDeleteView(SuccessMessageMixin, DeleteView):
model = Session
success_url = reverse_lazy('session_home')
success_message = "Session %(name)s was removed successfully"
def delete(self, request, *args, **kwargs):
obj = self.get_object()
data_to_return = super(SessionDeleteView, self).delete(request, *args, **kwargs)
messages.success(self.request, self.success_message % obj.__dict__)
return data_to_return
@magda正在使用视图中的消息框架,方法是使用。如果super().delete()中存在异常-例如,无法删除FK约束的对象-这仍将显示成功消息,对吗?是否有方法在生成消息之前确认删除成功?@BrettThomas这是正确的,如果super()中出现异常。delete()仍将显示成功消息。如果您先将其切换并调用super,那么异常将阻止存储消息。这对我来说很有效,但在反转后的最后一行,我必须从url.py添加一个实际的模式名称,否则会出现此错误