Django - Page Not Found (404)



What is 404 Page Not Found Error?

The HTTP protocol defines various status codes to indicate different types of HTTP responses. "404" is the HTTP status code that corresponds to the situation when the server cannot find the requested webpage. It is called as "404 error", also known as the "404 Not Found error" or "HTTP 404 Not Found".

Django's Default Template for 404 Error

In Django, a given URL route is mapped to a certain view. The 404 error may appear when a URL doesn’t have a corresponding view.

Let us enter a URL route that has not been defined in the URLCONF of the Django project −

Django Page Not Found 1

The Django project, created with the startproject template, has the DEBUG parameter set to TRUE. The above page appears when a view isn't found and DEBUG is set to TRUE. This is Django’s default template for 404 error code.

Render a Custom Error Page

To render a custom error page, set the DEBUG parameter to FALSE in the "setings.py" module. Also, you need to specify the list of ALLOWED_HOSTS such as localhost or a certain domain such as https://example.com. Set this parameter to "*" for any hostname.

DEBUG = False
ALLOWED_HOSTS = ["*"]

After these changes, the same URL doesn’t show any DEBUG message as in the earlier figure.

Django Page Not Found 2

You can further design a customised template, name it as "404.html", and place it in the "BASE_DIR/template" folder.

404.html

<html>
<body>
   <h2 style="text-align: center; color: blue; 
      font-weight:900;">The Page is Not found</h2>
</body>
</html>

Now, this page is displayed whenever the view is not found.

Django Page Not Found 3

Another approach to customize the 404 error response is to define a handler404() view in "views.py" file under the project folder.

Note − The view.py module is situated by default in the app folder. You need to create the same in the project folder explicitly.

views.py

from django.shortcuts import render

def handler404(request, exception):
   return render(request, '404handler.html')

Then, direct Django to render this template whenever a view isn’t found by assigning the handler404 variable with handler404() function, in the URLCONF of the project.

urls.py

from django.contrib import admin
from django.urls import path
from . import views

handler404 = views.handler404

urlpatterns = [
   path('admin/', admin.site.urls),
]

404handler.html

Save the following HTML script as 404handler.html in the templates folder −

<html>
<body>
   <h2 style="text-align: center; color: blue; 
      font-weight:900;">The Page is Not found</h2>
   <br>
   <br>
   <a href="../home"><b>Back to Home</b></a>
</body>
</html>

Visit any undefined URL route to render this customized 404 error page.

Django Page Not Found 4
Advertisements