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)
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):
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 :
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:
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 !
Partager