IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

handler404 vire au 500 !


Sujet :

Django Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 1
    Points : 4
    Points
    4
    Par défaut handler404 vire au 500 !
    Bonjour,

    Je suis un tutoriel d'Honoré Hounwanou, mamamia merci à toi ! Mais voilà, j'ai dû encore faire une étourderie !

    Petit contexte :
    Imac Mac OS High Sierra
    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> from django import get_version
    >>> get_version()
    '2.1'
    (ouais django.get_version() me fait :
     Traceback (most recent call last):   File "<stdin>", line 1, in <module> NameError: name 'django' is not defined )
    Alors voilà, j'ai un exemple bateau de recherche dans une liste et bien sûr ça peut sortir de la liste, en le faisant exprès (tout va bien par ailleurs si l'indice est dans la liste):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        @classmethod
        def find(klass, id):
          try:
              return klass.POSTS[int(id)-1]
          except:
              raise Http404('Erreur 404 - blog mocks # '+id )
    Alors voilà, en DEBUG=True, ça me fait bien une 404 (je l'adorais ce tacot quand j'avais 5 ans).

    Ensuite, j'ai fait comme Honoré dit les handler404 et handler500 :
    urls.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    from django.conf.urls import url, include, handler500, handler404
    from django.contrib import admin 
    #from django.urls import path
     
    from . import views
     
    handler404='acme.views.handler404'
    handler500='acme.views.handler500'
    views.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def handler404(request):
        return render(request, 'errors/404.html', {}, status=404 )
     
    def handler500(request):
        return render(request, 'errors/500.html', {}, status=500 )
    et deux pages... faites-moi confiance et d'ailleurs, voilà ce qui se passe en production, DEBUG=False dans settings.py : lorsque la 404 est appelée, c'est la 500 qui vient ! Et c'est bien ma 500 perso ! Donc la handler500='acme...' c'est bon, le def handler500 c'est bon, la page 500.html c'est bon... et la 404 c'est sa soeur mais non, elle veut pas !

    J'en suis à 3h au moins de comparaison, recherches sur les forum. Je ne vois aucune différence entre la façon dont j'ai déclaré la 404 et la 500, deux jumelles. Sauf que j'appelle Http404 explicitement, mais ça marche en Débug...
    Hors Debug, sans la ligne handler404='acme.views.handler404' de urls.py, plus de problème, même en prod, c'est une 404 (mais pas ma page à moi forcément ). Dès que je la remets j'ai erreur interne 500...

    Ah ! Si je fais une 404 de base, http://127.0.0.1:8000/nimportequoi , j'ai aussi une 500... j'enlève handler404 dans urls.py, et j'ai
    "Not Found" , The requested URL /nimportequoi was not found on this server.
    Commentaire du serveur, c'est normal :
    [20/Aug/2018 20:12:34] "GET /nimportequoi HTTP/1.1" 404 86
    Je remets la déclaration de la view handler404, j'ai une erreur 500 :
    [20/Aug/2018 20:15:06] "GET /nimportequoi HTTP/1.1" 500 137
    Oui je tourne en rond aussi, à force

    Oui aussi j'ai fait une page statique qui appelle ma vue et page 404... ça marche, urls -> handler404 -> 404.html ok !

    On dirait que la ligne déclarant le handler404 est pourrie , mais tout est tellement pareil entre la 404 et la 500, et la 500 qui marche (même si je ne devrais pas écoper d'une 500, le handler marche). J'enterre mon lapin ! (sed nunquam non)

    Bon, celui qui trouve gagne un grand merci merci merci !
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2019
    Messages : 1
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    j'y ai passé du temps également, tout est lié au fait que dans sa vidéo Honoré utilise django en version 1.X, alors que tu utilises (comme moi je présume) une version django 2.X.

    Il y a une modification des arguments obligatoires attendus par la méthode Http404 en version django 2.X :

    dans views.py tu as certainement codé la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def handler404(request):
    alors qu'il faut lui passer 2 arguments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    def handler404(request, exception):
    réponse trouvée ici https://stackoverflow.com/questions/...404-error-page et là https://docs.djangoproject.com/en/2....s/#error-views

    Nairolf.

Discussions similaires

  1. SAGE 500
    Par rabbi dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 25/04/2007, 00h07
  2. [Servlet] error 500
    Par phoebe dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 06/05/2004, 13h37
  3. redirection impossible => error 500 !
    Par alfigor dans le forum ASP
    Réponses: 4
    Dernier message: 26/04/2004, 11h02
  4. [Struts][Tomcat ] HTTP 500 - BeanUtils.populate (Eclipse)
    Par pjfly dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 10/04/2004, 11h03
  5. Réponses: 6
    Dernier message: 28/10/2002, 12h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo