Django:我如何使用assert ...而不显示系统错误页面?

时间:2010-05-12 07:10:37

标签: django debugging error-handling assert

我是Django的新手,并且在我的views.py中有一些代码:

try:
    myfunction()
except:
    assert False, sys.exc_info()[0]

这非常有用,因为如果出现错误,我会收到包含大量有用信息的电子邮件。 问题是它还将用户重定向到Webfaction系统错误页面。我想知道的是,我如何仍然获得有用的错误电子邮件,但将用户重定向到我自己的错误页面?

另外,这是处理Django错误的最佳方法吗?

2 个答案:

答案 0 :(得分:4)

这在很多层面都是错误的。

首先,没有理由只抓一个例外来筹集另一个例外。如果您的应用程序引发异常,那么Django自己的中间件将捕获它,并且取决于您是否有DEBUG=True,要么显示详细的调试页面,要么将异常邮寄给{{1}中提到的用户设置。

其次,你永远不应该得到一个Webfaction错误页面 - 我甚至无法想象这是怎么回事。如果您希望用户看到一个不错的错误页面,您应该定义404.html和500.html模板,如果您的需求更复杂,则应定义完整的错误处理视图。这已完全解释为in the documentation

答案 1 :(得分:1)

如果出现问题,请使用mail_admins自行发送邮件?

例如

from django.template.loaders import render_to_string

...

try:
   #something cool but edgy here
except YourFavouriteException, yfe:
   message_body = render_to_string('path/to/a/template/if/you/want.txt', {'exception': yfe, 'type_of_exception': type(yfe) } ## you could add more detail to this, of course
   mail_admins('Something exploded', message_body)