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)
(ouais django.get_version() me fait :mouarf: :Code:
1
2
3 >>> from django import get_version >>> get_version() '2.1'
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):Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'django' is not defined )
Alors voilà, en DEBUG=True, ça me fait bien une 404 (je l'adorais ce tacot quand j'avais 5 ans).Code:
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 )
Ensuite, j'ai fait comme Honoré dit les handler404 et handler500 :
urls.py :
views.py:Code:
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'
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 !Code:
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 )
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'aiCommentaire du serveur, c'est normal :"Not Found" , The requested URL /nimportequoi was not found on this server.
Je remets la déclaration de la view handler404, j'ai une erreur 500 :[20/Aug/2018 20:12:34] "GET /nimportequoi HTTP/1.1" 404 86
Oui je tourne en rond aussi, à force :ptdr:[20/Aug/2018 20:15:06] "GET /nimportequoi HTTP/1.1" 500 137
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 8O, 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 !