Escribiendo su primera aplicación en Django, parte 6

Este tutorial comienza donde quedó el Tutorial 5. Hemos creado una aplicación Web encuestas probada y ahora vamos a agregar una hoja de estilo y una imagen.

Aparte del HTML generado por el servidor, las aplicaciones Web por lo general tienen que servir archivos adicionales tales como imágenes, JavaScript o CSS necesarios para renderizar la página web completa. En Django, nos referimos a estos archivos como «archivos estáticos».

Para proyectos pequeños, esto no es un gran problema, ya que usted puede guardar los archivos estáticos en algún lugar donde su servidor web pueda encontrarlos. Sin embargo, en proyectos más grandes; especialmente aquellos compuestos de múltiples aplicaciones, lidiar con los distintos conjuntos de archivos estáticos proporcionados por cada aplicación empieza a ser difícil.

Eso es para lo que django.contrib.staticfiles es: recolecta los archivos estáticos de cada una de sus aplicaciones (y de cualquier otro lugar que usted especifique) en un solo lugar que se puede servir fácilmente en la producción.

Personalice la apariencia de su aplicación

En primer lugar, cree un directorio llamado static en su directorio polls. Django buscará archivos estáticos allí, del mismo modo cómo Django encuentra las plantillas dentro de polls/templates/.

La opción STATICFILES_FINDERS de Django contiene una lista de buscadores que saben cómo hallar archivos estáticos de diversas fuentes. Uno de los predeterminados es AppDirectoriesFinder que busca un subdirectorio «static» en cada una de las INSTALLED_APPS, como el que está en polls que acabamos de crear. El sitio administrativo utiliza la misma estructura de directorios para sus archivos estáticos.

Dentro del directorio static que acaba de crear, cree otro directorio llamado``polls`` y dentro de ese cree un archivo llamado style.css. En otras palabras, su hoja de estilo debe estar en polls/static/polls/style.css. Debido a la forma en cómo funciona el buscador de archivos estáticos AppDirectoriesFinder usted puede consultar este archivo estático en Django simplemente como polls/style.css, igual como usted consulta la ruta de acceso de las plantillas.

Espacio de nombres de archivo estático

Al igual que las plantillas, podemos considerar poner nuestros archivos estáticos directamente en polls/static (en lugar de crear otro subdirectorio polls), pero en realidad sería una mala idea. Django elegirá el primer archivo estático que encuentre cuyo nombre coincida, y si usted tuviera un archivo estático con el mismo nombre en una aplicación diferente, Django sería incapaz de distinguir entre ellos. Tenemos que ser capaces de indicarle a Django el correcto, y la forma más fácil de asegurar esto es organizándolos por espacio de nombres. Es decir, poniendo los archivos estáticos dentro de otro directorio con el nombre de la aplicación.

Introduzca el siguiente código en esa hoja de estilo (polls/static/polls/style.css):

polls/static/polls/style.css
li a {
    color: green;
}

A continuación, agregue lo siguiente en la parte superior de polls/templates/polls/index.html:

polls/templates/polls/index.html
{% load static %}

<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}">

La etiqueta de plantilla {% static %} genera la URL absoluta de los archivos estáticos.

That’s all you need to do for development.

Start the server (or restart it if it’s already running):

$ python manage.py runserver
...\> py manage.py runserver

Reload http://localhost:8000/polls/ and you should see that the question links are green (Django style!) which means that your stylesheet was properly loaded.

Agregando una imagen de fondo

A continuación, vamos a crear un subdirectorio para imágenes. Cree un subdirectorio images en el directorio polls/static/polls/. Dentro de este directorio, ponga una imagen llamada background.gif. En otras palabras, ponga su imagen en polls/static/polls/images/background.gif.

Luego, agregue a su hoja de estilo (polls/static/polls/style.css):

polls/static/polls/style.css
body {
    background: white url("images/background.gif") no-repeat;
}

Reload http://localhost:8000/polls/ and you should see the background loaded in the top left of the screen.

Advertencia

Por supuesto, la etiqueta de plantilla {% static %} no está disponible para su uso en archivos estáticos como su hoja de estilos que no son generadas por Django. Usted siempre debería utilizar rutas relativas para enlazar los archivos estáticos entre sí porque entonces usted puede cambiar la STATIC_URL (utilizada por la etiqueta de plantilla static para generar sus URLs) sin tener que modificar tampoco muchas de las rutas en sus archivos estáticos.

Estos son los fundamentos. Para más detalles sobre la configuración y otra información que se incluye con el framework consulte la guía paso-a-paso de los archivos estáticos y la referencia de los archivos estáticos. Implementación de archivos estáticos habla sobre cómo utilizar los archivos estáticos en un servidor real.

Cuando esté familiarizado con los archivos estáticos, lea la parte 7 de este tutorial para aprender a personalizar el sitio administrativo generado automáticamente de Django.

Back to Top