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">&times;</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添加一个实际的模式名称,否则会出现此错误