Django display 404 on missing template Django display 404 on missing template django django

Django display 404 on missing template


If you want this behaviour for all views on your site, you might want to write your own middleware with a process_exception method.

from django.template import TemplateDoesNotExistfrom django.views.defaults import page_not_foundclass TemplateDoesNotExistMiddleware(object):    """     If this is enabled, the middleware will catch    TemplateDoesNotExist exceptions, and return a 404    response.    """    def process_exception(self, request, exception):        if isinstance(exception, TemplateDoesNotExist):            return page_not_found(request)

If you have defined your own handler404 you would need to replace page_not_found above. I'm not immediately sure how you could convert the string handler404 into the callable required in the middleware..

To enable your middleware, add it to MIDDLEWARE_CLASSES in settings.py. Be careful of the position where you add it. The standard Django middleware warning applies:

Again, middleware are run in reverse order during the response phase, which includes process_exception. If an exception middleware returns a response, the middleware classes above that middleware will not be called at all.


put the return of the response in the view (or whereever the template is rendered) in a try-except block:

from django.http import Http404from django.shortcuts import render_to_responsefrom django.template import TemplateDoesNotExistdef the_view(request):    ...    try:        return render_to_response(...)    except TemplateDoesNotExist:        raise Http404


Off the top of my head, but if you set DEBUG=False in your settings, won't you get a 404 then on every error (including TemplateNotFound)?