Rajeev
Rajeev

Reputation: 46919

Page not found message using Django

If a user type a random url(http://testurl/cdsdfsd) for a site ,how to issue page not found.I there any changes settings.py or how to handle this..

Upvotes: 0

Views: 487

Answers (2)

Jerzyk
Jerzyk

Reputation: 3752

By default, django is rendering a 404.html template. Crete this file anywhere where your templates are found. E.g. you can create templates directory in your django project root, then add it to the TEMPLATE_DIRS in settings.py:

import os
BASE_DIR = os.path.abspath(os.path.dirname(__file__))

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/'),
)

another solution is to write your own middleware which will check if there was 404 response, and the to decide what to display. This is especially useful if you want to have a fallback solution (like static pages) or to play with the response and e.g. perform a search on the site and show possible options.

here is an example middleware from django.contrib.flatpages. it check if url is defined in the database, if so - returns this page if not, pass and return default response.

class FlatpageFallbackMiddleware(object):
    def process_response(self, request, response):
        if response.status_code != 404:
            return response # No need to check for a flatpage for non-404 responses.
        try:
            return flatpage(request, request.path_info)
            # Return the original response if any errors happened. Because this
            # is a middleware, we can't assume the errors will be caught elsewhere.
        except Http404:
            return response
        except:
            if settings.DEBUG:
                raise
            return response

Upvotes: 0

dting
dting

Reputation: 39287

The django tutorial and docs have sections you should read.

You need to override the default 404 view.

in your urlconf:

handler404 = 'mysite.views.my_custom_404_view'

Upvotes: 2

Related Questions