Как вернуть 404 и 500 ошибки в формате json вместо стандартных html-страниц в Django 4.x
В Интернете я нашел только очень несвежие статьи, которые не совсем решают мою проблему.
Я пробовал этот способ, но Django по-прежнему возвращает html-страницы:
exceptions.py
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response is not None:
if response.status_code == 500:
response.data = {"code": 500, "message": "Internal server error"}
if response.status_code == 404:
response.data = {"code": 404, "message": "The requested resource was not found on this server"}
return response
settings.py
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'backend.exceptions.custom_exception_handler',
}
Я думаю, что вы просто переопределите шаблоны по умолчанию...
Я переопределил их с помощью этого в view.py:
def handler404(request, exception):
return render(request, 'custom_404.html', status=404)
def handler500(request):
return render(request, 'custom_500.html', status=500)
Это просто волшебным образом работает, я действительно не могу сказать вам, как он знает направить 500 к моему обработчику... он не определен в другом месте в проекте
и затем для шаблона, custom_505.html, будет выглядеть примерно так:
{{data}}