这可能是一个Python新手问题......
try:
#do something
except:
raise Exception('XYZ has gone wrong...')
即使DEBUG = True,我也不希望这个raise Exception
给我那个黄页。我实际上想通过将用户重定向到错误页面来处理异常或显示错误(在页面顶部给出一条CSS错误消息......)
我该如何处理?有人可以指导我吗?如果我只是提高它,我将获得黄色调试页面(再次,我不希望某些例外通过在DEBUG = True时显示调试页面来阻止网站运行。)
如何在views.py中处理这些异常?
感谢。
答案 0 :(得分:20)
这里有三个选项。
process_exception
已实施中间件示例:
class MyExceptionMiddleware(object):
def process_exception(self, request, exception):
if not isinstance(exception, SomeExceptionType):
return None
return HttpResponse('some message')
答案 1 :(得分:4)
您可以引发404错误或只是将用户重定向到自定义错误页面,并显示错误消息
from django.http import Http404
#...
def your_view(request)
#...
try:
#... do something
except:
raise Http404
#or
return redirect('your-custom-error-view-name', error='error messsage')
答案 2 :(得分:1)
如果您也想获得正确的回溯和消息。然后,我建议使用自定义的中间件,并将其添加到最后的settings.py中间件部分。
以下代码仅在生产中将处理异常。您可以根据需要删除调试条件。
Artist,Title
ErrorUndefined,DoesNotExist
Taylor Swift,Blank Space
Bon Jovi,It's My Life
答案 3 :(得分:0)
另一个建议可能是使用Django messaging framework来显示Flash消息,而不是错误页面。
from django.contrib import messages
#...
def another_view(request):
#...
context = {'foo': 'bar'}
try:
#... some stuff here
except SomeException as e:
messages.add_message(request, messages.ERROR, e)
return render(request, 'appname/another_view.html', context)
然后在Django文档中的视图中:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}