Django - Пользовательские шаблоны ошибок не отображаются

У меня есть несколько пользовательских шаблонов в моем приложении django. Но они не отображаются, а вместо них отображается основной шаблон:

500 Internal Server Error
Exception inside application.

Daphne

Edit: Если я перемещу свой dev.py (используемый на локалке с DEBUG = False), то шаблон будет отображаться.

Вот моя установка:

Views.py (уровень приложения: main):

def custom_500(request):
    return render(request,'main/500.html', status=500)

templates (уровень приложения: main с путем: templates->main->500html)

500.html custom template file

urls.py (уровень проекта)

from main.views import custom_400, custom_500
from django.conf.urls import handler500, handler400
handler500 = 'main.views.custom_500'

settings (папка) staging.py:

DEBUG = False
ALLOWED_HOSTS = ['domainname.com' ]
SECURE_SSL_REDIRECT = True

У меня также есть base.py в папке с настройками, но я не вижу там ничего, о чем следовало бы сообщить.

Я попытался перечислить все проверки, которые я пробовал:

В оболочке приложения heroku:

print(settings.ALLOWED_HOSTS) # returned the domain name
print(settings.DEBUG) # returned false
print(os.getenv('DJANGO_SETTINGS_MODULE')) # mysite.settings.staging
print(settings.CSRF_COOKIE_SECURE) # true (just in case I would the app would be treated as non prod)
print(settings.SECURE_SSL_REDIRECT) # true (just in case I would the app would be treated as non prod)

и наконец:

>>> from django.shortcuts import render 
>>> from django.test import RequestFactory
>>> request = RequestFactory().get('/')
>>> render(request,'main/500.html', status=500)

#returned: <HttpResponse status_code=500, "text/html; charset=utf-8">

У меня заканчиваются идеи, и я уверен, что это, вероятно, что-то простое.

Я надеюсь, что у кого-то могут быть какие-то предложения.

Вероятно, существует несколько способов решить эту проблему, но я делаю так. Хотя можно было бы немного оптимизировать этот способ, он работает хорошо до тех пор, пока ошибка находится внутри приложения django, а не на самом веб-сервере.

в urls.py: (не вижу здесь никакой разницы).

if not DEBUG:  # i don't want custom error handling in my dev environment because i want to see the dump to help with troubleshooting.
    handler500 = '<project>.views.custom_500'

в файле views.py: Я вижу здесь некоторые различия... не знаю, существенны они или нет.

def custom_500(request, *args, **argv):
    context = {'<load up the data i need to send to the custom template>',}
    t = loader.get_template('error.html')
    response = HttpResponseServerError(t.render(context))
    response.status_code = 500   # need to set this to ensure flags the error and sends dump data to admins.
    return response
Вернуться на верх