152 votes

Django, création d'une page d'erreur 500/404 personnalisée

En suivant le tutoriel trouvé aquí exactement, je ne peux pas créer une page d'erreur 500 ou 404 personnalisée. Si je tape une mauvaise URL, la page me donne la page d'erreur par défaut. Y a-t-il quelque chose que je devrais vérifier et qui empêcherait l'affichage d'une page personnalisée ?

Répertoires de fichiers :

mysite/
    mysite/
        __init__.py
        __init__.pyc
        settings.py
        settings.pyc
        urls.py
        urls.pyc
        wsgi.py
        wsgi.pyc
    polls/
        templates/
            admin/
                base_site.html
            404.html
            500.html
            polls/
                detail.html
                index.html
        __init__.py
        __init__.pyc
        admin.py
        admin.pyc
        models.py
        models.pyc
        tests.py
        urls.py
        urls.pyc
        view.py
        views.pyc
    templates/
    manage.py

Dans le fichier mysite/settings.py, je les ai activés :

DEBUG = False
TEMPLATE_DEBUG = DEBUG

#....

TEMPLATE_DIRS = (
    'C:/Users/Me/Django/mysite/templates', 
)

dans le fichier mysite/polls/urls.py :

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
    url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),
)

Je peux afficher tout autre code nécessaire, mais que dois-je changer pour obtenir une page d'erreur 500 personnalisée si j'utilise une mauvaise url ?

Modifier

SOLUTION : J'ai eu un supplément

TEMPLATE_DIRS

dans mon fichier settings.py et c'est ce qui a causé le problème.

21voto

Rehmat Points 1813

Dans Django 3.x la réponse acceptée ne fonctionnera pas car render_to_response a été complètement supprimé et d'autres modifications ont été apportées depuis la version pour laquelle la réponse acceptée fonctionnait.

D'autres réponses existent également, mais je présente une réponse un peu plus propre :

Dans votre principal urls.py fichier :

handler404 = 'yourapp.views.handler404'
handler500 = 'yourapp.views.handler500'

En yourapp/views.py fichier :

def handler404(request, exception):
    context = {}
    response = render(request, "pages/errors/404.html", context=context)
    response.status_code = 404
    return response

def handler500(request):
    context = {}
    response = render(request, "pages/errors/500.html", context=context)
    response.status_code = 500
    return response

Assurez-vous que vous avez importé render() en yourapp/views.py fichier :

from django.shortcuts import render

Note complémentaire : render_to_response() a été déprécié dans Django 2.x et il a été complètement supprimé en verision 3.x .

19voto

Krishna G Nair Points 202

Si tout ce dont vous avez besoin est de montrer des pages personnalisées qui ont des messages d'erreur fantaisistes pour votre site quand DEBUG = False Ajoutez ensuite deux modèles nommés 404.html et 500.html dans votre répertoire de modèles et le système récupérera automatiquement ces pages personnalisées lorsqu'un message 404 ou 500 sera affiché.

18voto

Anuj TBE Points 1254

Aucune vue supplémentaire n'est nécessaire. https://docs.djangoproject.com/en/3.0/ref/views/

Il suffit de placer les fichiers d'erreur à la racine du répertoire des modèles.

  • 404.html
  • 400.html
  • 403.html
  • 500.html

Et il devrait utiliser votre page d'erreur lorsque le débogage est faux.

15voto

Rakesh babu Points 315

Settings.py :

DEBUG = False
TEMPLATE_DEBUG = DEBUG
ALLOWED_HOSTS = ['localhost']  #provide your host name

et ajoutez simplement votre 404.html y 500.html pages dans le dossier des modèles. supprimer 404.html y 500.html à partir de modèles dans les applications de sondage.

14voto

DeN Points 308

En Django 2.* vous pouvez utiliser cette construction dans vues.py

def handler404(request, exception):
    return render(request, 'errors/404.html', locals())

En paramètres.py

DEBUG = False

if DEBUG is False:
    ALLOWED_HOSTS = [
        '127.0.0.1:8000',
        '*',
    ]

if DEBUG is True:
    ALLOWED_HOSTS = []

En urls.py

# https://docs.djangoproject.com/en/2.0/topics/http/views/#customizing-error-views
handler404 = 'YOUR_APP_NAME.views.handler404'

Habituellement, je crée default_app et gérer les erreurs à l'échelle du site, les processeurs de contexte en elle.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X