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.

7voto

allsyed Points 1299

Créez une erreur, sur la page d'erreur, découvrez à partir de quel endroit django charge les modèles, c'est-à-dire la pile de chemins. répertoire du modèle ajouter ces pages html 500.html , 404.html . Lorsque ces erreurs se produisent, les fichiers modèles correspondants sont automatiquement chargés.

Vous pouvez aussi ajouter des pages pour d'autres codes d'erreur, par exemple 400 y 403 .

J'espère que cela vous aidera ! !!

5voto

FireZenk Points 93

En une seule ligne (pour la page générique 404) :

from django.shortcuts import render_to_response
from django.template import RequestContext

return render_to_response('error/404.html', {'exception': ex},
                                      context_instance=RequestContext(request), status=404)

5voto

# views.py
def handler404(request, exception):
    context = RequestContext(request)
    err_code = 404
    response = render_to_response('404.html', {"code":err_code}, context)
    response.status_code = 404
    return response

# <project_folder>.urls.py
handler404 = 'todo.views.handler404' 

Cela fonctionne sur django 2.0

N'oubliez pas d'inclure votre 404.html dans le dossier des modèles d'applications.

3voto

astrognocci Points 1027

Essayez de déplacer vos modèles d'erreur vers .../Django/mysite/templates/ ?

Je ne suis pas sûr de ce point, mais je pense que ces éléments doivent être "globaux" pour le site web.

1voto

Praveen Kumar Points 51

Dans le fichier Django Root urls.py, ajoutez les lignes suivantes

from django.conf.urls import (handler400, handler403, handler404, handler500)

handler400 = 'app.views.bad_request'
handler403 = 'app.views.permission_denied'
handler404 = 'app.views.page_not_found'
handler500 = 'app.views.server_error'

Dans le fichier views.py de votre application, créez les fonctions respectives.

def server_error(request, exception=None):
    # return render(request, '500.html')
    return redirect('/')

Enfin, dans votre fichier settings.py, définissez les paramètres suivants DEBUG = False

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