Django:捕获完整性错误并使用模板显示自定义消息

Raj*_*ena 67 python django

在我的django驱动的应用程序中,只有一个明显的情况可能会出现"IntegrityError".
那么,我如何捕获该错误并使用模板显示消息?

Joe*_*Joe 146

只需使用try和catch.

from django.db import IntegrityError
from django.shortcuts import render_to_response

try:
    # code that produces error
except IntegrityError as e:
    return render_to_response("template.html", {"message": e.message})
Run Code Online (Sandbox Code Playgroud)

如果需要,可以使用模板中的消息.

编辑

感谢Jill-JênnVie,您应该使用e.__cause__,如此处所述.

  • 正如[v1.6的文档](https://docs.djangoproject.com/en/1.6/ref/exceptions/#database-exceptions)所指出的,根据[PEP 3134],首选`e .__ cause__` ](http://legacy.python.org/dev/peps/pep-3134/). (2认同)
  • 如果您没有收到消息,请尝试以下操作:e.args (2认同)

Chi*_*ael 10

如果您在CreateView mixin中使用基于类的视图,则需要"尝试"调用超类的form_valid,例如:

from django.db import IntegrityError
...
class KumquatCreateView(CreateView):
    model = Kumquat
    form_class = forms.KumquatForm
    ...
    def form_valid(self, form):
        ...
        try:
            return super(KumquatCreateView, self).form_valid(form)
        except IntegrityError:
            return HttpResponse("ERROR: Kumquat already exists!")
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用模板render_to_response等使输出更好.