django - 如果在 DeleteView 删除调用期间发生错误,请不要重定向但在 confirm_delete 模板上显示错误
问题描述
我目前正在尝试覆盖DeleteView
的继承delete
方法来实现我想要的行为。但是,我对 Django 框架和 Python 比较陌生,不知道该怎么做。
目标是删除一个对象,如果ProtectedError
发生,confirm_delete
模板应显示描述问题的错误消息,并且不应将用户重定向到success_url
. 我的第一种方法,类似于其他形式,是将错误打包到form.non_field_error
中,但我不知道如何访问它。
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
try:
self.object.delete()
# Redirect to success_url
except ProtectedError:
pass
# Add error to confirm_delete template / delete Form and stay on the delete confirmation page (don't delete)
return HttpResponseRedirect(success_url)
那么,用户怎么可能只在成功删除后才被重定向到success_url,但如果出现ProtectedError,并且没有发生重定向,confirm_delete 模板上会出现错误消息?
解决方案
你基本上做与get()
类的方法相同的事情,只是将一些关于错误的信息添加到上下文中。
def delete(self, request, *args, **kwargs):
self.object = self.get_object()
success_url = self.get_success_url()
try:
self.object.delete()
# Redirect to success_url
except ProtectedError:
context = self.get_context_data(
object=self.object,
error='Object is protected'
)
return self.render_to_response(context)
return HttpResponseRedirect(success_url)
查看https://ccbv.co.uk以更好地了解基于 Django 类的视图如何在幕后工作。
然后,您必须在模板中显示错误。这是 Django 文档中的模板示例:
<form method="post">{% csrf_token %}
{% if error }}<p class="error">{{ error }}</p>{% endif %}
<p>Are you sure you want to delete "{{ object }}"?</p>
<input type="submit" value="Confirm">
</form>
推荐阅读
- reactjs - 单击“登录”按钮后如何链接新页面?
- sql - Kinesis Analytics:识别子流结束
- c# - 从互操作库中识别对对象的唯一引用(Doument.Paragraphs 等)
- javascript - 如何获取表单值并将其推送到数组?(固定代码)
- javascript - 为什么我的列表项调用了它不应该调用的函数?
- php - php 按键向多维数组中插入数据
- android - 获取在画布内绘制的多边形内的点,并缩放包含画布的相对布局
- typescript - Argument of type '{ [x: string]: any; }' is not assignable to parameter of type 'string[]'
- html - 当它折叠时,如何在这个引导导航栏中将链接的文本居中?
- c# - 如何自动模拟现有的模拟对象?