Contenido Estático

Muchos de los desarrolladores que trabajan con Django se quedan sorprendidos con el funcionamiento de las vistas y plantillas, pero eso no es todo, también se deben tener en cuenta las otras partes de una aplicación: como las imágenes, las hojas de estilo, Javascript y otros elementos. Estas partes se les conoce en general como el contenido estático.

Cuando se tienen proyectos pequeños, no es mucho el trabajo al respecto, se pueden incluir este tipo de contenido en las plantillas sin ningún problema. Sin embargo cuando el proyecto deja de ser pequeño, y empieza a tener muchas partes, lidiar con este tipo de contenido puede ser un dolor de cabeza.

Para evitar jaquecas innecesarias Django mediante: django.contrib.staticfiles, gestiona el contenido estático para las aplicaciones, y los ordena en una sola ubicación fácil de referenciar y de usar.

Cambios en Settings.py

El primer lugar donde inicia el manejo de los archivos estáticos reside en el archivo de configuraciones del proyecto: settings.py, en este archivo tenemos líneas exclusivamente dedicadas al manejo del contenido estático.

En este archivo existen 4 elementos: STATIC_ROOT, STATIC_URL, STATICFILES_DIRS, STATICFILES_FINDERS cada uno de ellos con un propósito documentado en el mismo archivo settings.py a modo de comentario.

Para empezar con nuestro ejemplo del capítulo, debemos prestar atención a STATICFILES_DIRS, este elemento permite declarar la ruta, desde la cual se enlazará el contenido estático, lo dejamos de la siguiente manera:

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(RUTA_PROYECTO,'static'),
)

El resto de elementos referentes al contenido estático, no se manipulan. Ya que estamos en la versión de desarrollo y aún falta para la etapa de producción. No olvidar guardar el archivo, para proseguir sin errores.

Directorio STATIC

Ahora procedemos a crear el directorio: static, este se debe hacer dentro del directorio del proyecto, al mismo nivel que: carga y plantillas. Dentro del directorio static, debemos tener una carpeta por cada tipo de contenido estático, que deseemos incluir. Para el ejemplo tendremos tres subdirectorios en static: css, img y js.

Directorio static

Directorio static

Dentro de cada uno de estos directorios, debemos incluir nuestro contenido estático. Para evitar desenfocar el curso, abarcando otro tipo de temas, usaré instrucciones muy básicas tanto para CSS, como para Javascript, y de la misma forma para evitar salirnos del tema, no responderé preguntas referentes a CSS o Javascript, a excepción de alguna pregunta que afecte directamente el entendimiento del curso.

Nota: Uso de librerias para Frontend

En esta parte se pueden usar diversas herramientas existentes como: Bootstrap, Boilerplate, 960gs, Blueprint, Jquery Mobile o cualquier otro conjunto de archivos que faciliten la construcción de interfaces de usuario. Por supuesto que si desean construir sus interfaces, sin intervención mágica de estas herramientas, también lo pueden hacer.

Contenido Estatico para el Ejemplo

En este capítulo el contenido estático que usaré será el siguiente:

Contenido de static para el ejemplo

Contenido de static para el ejemplo

El contenido de base.css:

base.css

base.css

El contenido de demo.js:

demo.js

demo.js

Para que el demo.js funcione, también se debe agregar jquery a nuestro contenido estático.

Dentro del directorio img colocaré la siguiente imagen, que servirá de icono de acceso rápido o favicon (como es mayormente conocido):

icono.png

icono.png

Uso en las plantillas

Para poder hacer uso del contenido estático en las plantillas, cada vista debe finalizar con context_instance=RequestContext(request) para poder usar {{STATIC_URL}} y así en caso de cambiar el nombre o ubicación de la carpeta static en producción, no afecte el proyecto. (Esto hace que Django sea muy dinámico).

Las funciones dentro del archivo views.py quedarían así:

Fragmento de views.py

Fragmento de views.py

La plantilla base.html quedaría de la siguiente manera:

base.html

base.html

Notar que cada vez que se quiere usar el contenido estático se escribe {{ STATIC_URL }}, y luego el directorio/archivo que se desee enlazar.

Resultado final del ejemplo

Nuestro resultado final debe ser el siguiente:

static, resultado final del ejemplo

static, resultado final del ejemplo

Si se desea se puede observar la ejecución sin archivos estáticos, para fines de depuración, desde el terminal:

python manage.py runserver --nostatic

Y así en cuestión de minutos ya tienen el contenido estático habitando en el proyecto. La próxima semana veremos la gestión del usuario y las opciones que podemos aprovechar de el, ya estamos por concluir nuestro curso introductorio a Django, con la puesta en producción.

Como siempre no olviden que si se desea profundizar el tema, pues se tiene información importante en la documentación oficial de Django, incluyendo la referencia de la aplicación static.

Experimenten, jueguen con Django, prueben, practiquen, usenlo en sus proyectos pequeños que no habra de que arrepentirse, comenten y pregunten como todas las semanas, que eso agrega muchísimo valor al curso y permite ajustarlo mejor.

No se olviden que si se perdieron de algún archivo o quieren ver el resultado final, pueden revisar el repositorio del proyecto en github. Que tengan un estupendo inicio de semana :)

Sergio Infante Montero

Programador, difusor, traductor, contribuidor, activista y entusiasta de Software Libre y Código Abierto. Es consultor tecnológico de varias organizaciones dedicadas al comercio, educación e industria. En los últimos años ha dedicado mayor tiempo al desarrollo de aplicaciones web.

http://neosergio.net/