Исключение Django-catch
это может быть вопрос новичка Python...
try:
#do something
except:
raise Exception('XYZ has gone wrong...')
даже с DEBUG=True, я не хочу этого raise Exception
дает мне эту желтую страницу. Я действительно хочу обработать исключение, перенаправив пользователей на страницу ошибки или показав ошибку (дайте сообщение об ошибке CSS в верхней части страницы...)
Как мне справиться с этим? Кто-нибудь может меня проводить? Если я просто подниму его, я получу желтую страницу отладки (опять же, я не хочу, чтобы некоторые исключения останавливали работу сайта отображение страницы отладки при DEBUG=True).
Как обрабатывать эти исключения в views.py?
спасибо.
3 ответов
у вас есть три варианта.
- обеспечить 404 обработчик или 500 обработчик
- поймать исключение в другом месте кода и сделать соответствующее перенаправление
- предоставьте пользовательское промежуточное ПО с
process_exception
реализовала
Пример Промежуточного ПО:
class MyExceptionMiddleware(object):
def process_exception(self, request, exception):
if not isinstance(exception, SomeExceptionType):
return None
return HttpResponse('some message')
вы можете вызвать ошибку 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')
другое предложение может быть использование Django рамки обмена сообщениями для отображения 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 %}