I have basic application with admin panel and direct_to_template home page. When I type url which does not match any from urls I receive 404 error, but when I set DEBUG to false I receive 500.html instead of 404.html. Any idea why?
Django serves a 500 when a view function fails, which means there must be some non debug specific code breaking.
The only way to tell is see what exception django is logging either via your server logs or the email that django sends to the ADMINS
list.
I would also check TEMPLATE_DIRS path in settings.py as this was the problem in my case. Django raises 404 error, but as it was not able to find 404.html (in the path specified in TEMPLATE_DIRS) so it raised 500 error - template not found (which is either show in the browser when debug is True or server log, when debug=false).
I have met the same problems. And I make the system send the error to my gmail:
SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 127.0.0.1:8000
So, I add this code in settings.py:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
And now, it's ok. I think when you make the DEBUG and TEMPLATE_DEBUG are false, you must set ALLOWED_HOSTS.
Good luck.
If anyone ever comes across such an error then you may also consider writing your view this way:
def error_404(request, exception):
data = {"name": "yoursite.com"}
return render(request,'404.html', data)
Without the exception argument
then it leads to error 500
and in preference 500.html
is executed.
Maybe there is something wrong in your 404.html.For example, I use extends tag like
{% extends base.html%}
in my 404.html,then it always shows 'sever error 500' instead of 'page not found 404'. but when I correct my mistake as follow
{% extends "base.html" %}
everything goes well.
In my case, I had an invalid tag in my 404.html. That caused django to break somehow. There was not any traces in the log showing that
© 2022 - 2024 — McMap. All rights reserved.