Todas estas vistas se usan creando diccionarios de configuración en tus archivos URLconf y pasando estos diccionarios como el tercer miembro de la tupla URLconf para un patrón dado.
Por ejemplo, ésta es una URLconf simple que podrías usar para presentar una página estática "about" (acerca de):
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
('^about/$', direct_to_template, {
'template': 'about.html'
})
)
Aunque esto podría verse un poco "mágico" a primera vista — ¡mira, una vista
sin código! —, es en realidad exactamente lo mismo que los ejemplos en el
Capítulo 8: la vista direct_to_template
simplemente toma información del
diccionario de parámetros extra y usa esa información cuando renderiza la
vista.
Ya que esta vista genérica — y todas las otras — es una función de vista
regular como cualquier otra, podemos reusarla dentro de nuestras propias
vistas. Como ejemplo, extendamos nuestro ejemplo "about" para mapear URLs de
la forma /about/<cualquiercosa>/
para renderizar estáticamente
/about/<cualquiercosa>.html
. Haremos esto primero modificando la URLconf
para que apunte a una función de vista:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
from mysite.books.views import about_pages
urlpatterns = patterns('',
('^about/$', direct_to_template, {
'template': 'about.html'
}),
('^about/(\w+)/$', about_pages),
)
A continuación, escribimos la vista about_pages
:
from django.http import Http404
from django.template import TemplateDoesNotExist
from django.views.generic.simple import direct_to_template
def about_pages(request, page):
try:
return direct_to_template(request, template="about/%s.html" % page)
except TemplateDoesNotExist:
raise Http404()
Aquí estamos tratando direct_to_template
como cualquier otra función. Ya que
esta devuelve una HttpResponse
, podemos retornarlo así como está. La única
ligera dificultad aquí es ocuparse de las plantillas perdidas. No queremos que
una plantilla inexistente cause un error de servidor, por lo tanto atrapamos las
excepciones TemplateDoesNotExist
y en su lugar devolvemos errores 404.