szaman
szaman

Reputation: 6756

500.html instead of 404.html

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?

Upvotes: 8

Views: 5245

Answers (6)

Alfonso_MA
Alfonso_MA

Reputation: 555

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

Upvotes: 0

Yegon Kipngetich
Yegon Kipngetich

Reputation: 101

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.

Upvotes: 2

Ni Xiaoni
Ni Xiaoni

Reputation: 1679

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.

Upvotes: 2

JChen___
JChen___

Reputation: 3701

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.

Upvotes: 1

Alexey Vassiliev
Alexey Vassiliev

Reputation: 2435

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).

Upvotes: 4

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.

Upvotes: 9

Related Questions