Además de la respuesta anterior, es importante decir que views.py debe devolver una HttpResponse con un estado 404 en el encabezado http. Es importante informar a los motores de búsqueda que la página actual es un 404. Los spammers a veces crean muchas URL que podrían parecer que lo llevarían a algún lugar, pero luego le sirven otro contenido. Con frecuencia hacen que muchas direcciones diferentes le brinden casi el mismo contenido. Y debido a que no es fácil de usar, la mayoría de las líneas de guía de SEO penalizan eso. Por lo tanto, si tiene muchas direcciones que muestran el mismo contenido pseudo-404, no podría verse bien en los sistemas de rastreo de los sitios web de búsqueda. Por eso, debe asegurarse de que la página que está sirviendo como un 404 personalizado tenga un estado 404. Así que aquí es una buena manera de ir:
En urls.py complemento de la aplicación:
# Imports
from django.conf.urls.static import static
from django.conf.urls import handler404
from django.conf.urls import patterns, include, url
from yourapplication import views
##
# Handles the URLS calls
urlpatterns = patterns('',
# url(r'^$', include('app.homepage.urls')),
)
handler404 = views.error404
En views.py complemento de la aplicación:
# Imports
from django.shortcuts import render
from django.http import HttpResponse
from django.template import Context, loader
##
# Handle 404 Errors
# @param request WSGIRequest list with all HTTP Request
def error404(request):
# 1. Load models for this view
#from idgsupply.models import My404Method
# 2. Generate Content for this view
template = loader.get_template('404.htm')
context = Context({
'message': 'All: %s' % request,
})
# 3. Return Template for this view + Data
return HttpResponse(content=template.render(context), content_type='text/html; charset=utf-8', status=404)
El secreto está en la última línea: estado = 404
Espero que haya sido útil.
Espero con interés las aportaciones de la comunidad a este enfoque. =)
Obtengo "no puedo importar vistas de nombre" cuando escribo "desde vistas de importación de app1" en "views.py". El nombre de mi aplicación es "app1" – Timo
Urls.py de la aplicación significa: si tiene un 'sitio web' del proyecto y un' blog' de la aplicación. Entonces deberías agregar 'handler404' en 'website.urls.py' no' blog.urls.py' –