{"title":"Escribiendo su primera aplicación en Django, parte 6","version":"2.0","locale":"es","docname":"intro/tutorial06","url":"/es/2.0/intro/tutorial06/","canonical":"https://djangodocs.dev/es/2.0/intro/tutorial06/","summary":"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…","html":"<h1>Escribiendo su primera aplicación en Django, parte 6<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-6\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Este tutorial comienza donde quedó el <a class=\"reference internal\" href=\"/es/2.0/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a>. Hemos creado una aplicación Web encuestas probada y ahora vamos a agregar una hoja de estilo y una imagen.</p>\n<p>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».</p>\n<p>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.</p>\n<p>Eso es para lo que <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> 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.</p>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Personalice la apariencia de su aplicación<a class=\"heading-anchor\" href=\"#customize-your-app-s-look-and-feel\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>En primer lugar, cree un directorio llamado <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> en su directorio <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>. Django buscará archivos estáticos allí, del mismo modo cómo Django encuentra las plantillas dentro de <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/</span></code>.</p>\n<p>La opción <a class=\"reference internal\" href=\"/es/2.0/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></code></a> de Django contiene una lista de buscadores que saben cómo hallar archivos estáticos de diversas fuentes. Uno de los predeterminados es <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code> que busca un subdirectorio «static» en cada una de las <a class=\"reference internal\" href=\"/es/2.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, como el que está en <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> que acabamos de crear. El sitio administrativo utiliza la misma estructura de directorios para sus archivos estáticos.</p>\n<p>Dentro del directorio <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> que acaba de crear, cree otro directorio llamado``polls`` y dentro de ese cree un archivo llamado <code class=\"docutils literal notranslate\"><span class=\"pre\">style.css</span></code>. En otras palabras, su hoja de estilo debe estar en <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>. Debido a la forma en cómo funciona el buscador de archivos estáticos <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code> usted puede consultar este archivo estático en Django simplemente como <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/style.css</span></code>, igual como usted consulta la ruta de acceso de las plantillas.</p>\n<aside class=\"admonition-static-file-namespacing admonition\">\n<p class=\"admonition-title\">Espacio de nombres de archivo estático</p>\n<p>Al igual que las plantillas, <em>podemos</em> considerar poner nuestros archivos estáticos directamente en <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static</span></code> (en lugar de crear otro subdirectorio <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>), 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 <em>diferente</em>, 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 <em>organizándolos por espacio de nombres</em>. Es decir, poniendo los archivos estáticos dentro de <em>otro</em> directorio con el nombre de la aplicación.</p>\n</aside>\n<p>Introduzca el siguiente código en esa hoja de estilo (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code>polls/static/polls/style.css</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"polls/static/polls/style.css\"><code><span class=\"nt\">li</span><span class=\"w\"> </span><span class=\"nt\">a</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">color</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">green</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>A continuación, agregue lo siguiente en la parte superior de <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/polls/index.html</span></code>:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"html+django\"><figcaption class=\"code-block-caption\"><code>polls/templates/polls/index.html</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"polls/templates/polls/index.html\"><code><span class=\"cp\">{%</span> <span class=\"k\">load</span> <span class=\"nv\">static</span> <span class=\"cp\">%}</span>\n\n<span class=\"p\">&lt;</span><span class=\"nt\">link</span> <span class=\"na\">rel</span><span class=\"o\">=</span><span class=\"s\">&quot;stylesheet&quot;</span> <span class=\"na\">type</span><span class=\"o\">=</span><span class=\"s\">&quot;text/css&quot;</span> <span class=\"na\">href</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{%</span> <span class=\"k\">static</span> <span class=\"s1\">&#39;polls/style.css&#39;</span> <span class=\"cp\">%}</span><span class=\"s\">&quot;</span> <span class=\"p\">/&gt;</span>\n</code></pre></figure>\n<p>La etiqueta de plantilla <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> genera la URL absoluta de los archivos estáticos.</p>\n<p>Eso es todo lo que necesita hacer para el desarrollo. Recargue <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> y usted debería ver que los enlaces de preguntas son de color verde (¡El estilo Django!) lo que significa que su hoja de estilos se cargó correctamente.</p>\n</section>\n<section id=\"adding-a-background-image\">\n<h2>Agregando una imagen de fondo<a class=\"heading-anchor\" href=\"#adding-a-background-image\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>A continuación, vamos a crear un subdirectorio para imágenes. Cree un subdirectorio <code class=\"docutils literal notranslate\"><span class=\"pre\">images</span></code> en el directorio <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/</span></code>. Dentro de este directorio, ponga una imagen llamada <code class=\"docutils literal notranslate\"><span class=\"pre\">background.gif</span></code>. En otras palabras, ponga su imagen en <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/images/background.gif</span></code>.</p>\n<p>Luego, agregue a su hoja de estilo (<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>):</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"css\"><figcaption class=\"code-block-caption\"><code>polls/static/polls/style.css</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"polls/static/polls/style.css\"><code><span class=\"nt\">body</span><span class=\"w\"> </span><span class=\"p\">{</span>\n<span class=\"w\">    </span><span class=\"k\">background</span><span class=\"p\">:</span><span class=\"w\"> </span><span class=\"kc\">white</span><span class=\"w\"> </span><span class=\"nb\">url</span><span class=\"p\">(</span><span class=\"s2\">&quot;images/background.gif&quot;</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"kc\">no-repeat</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Reload <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> and you should see the background\nloaded in the top left of the screen.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Advertencia</p>\n<p>Por supuesto, la etiqueta de plantilla <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> 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 <strong>rutas relativas</strong> para enlazar los archivos estáticos entre sí porque entonces usted puede cambiar la <a class=\"reference internal\" href=\"/es/2.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> (utilizada por la etiqueta de plantilla <a class=\"reference internal\" href=\"/es/2.0/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> para generar sus URLs) sin tener que modificar tampoco muchas de las rutas en sus archivos estáticos.</p>\n</aside>\n<p>Estos son los <strong>fundamentos</strong>. Para más detalles sobre la configuración y otra información que se incluye con el framework consulte la <a class=\"reference internal\" href=\"/es/2.0/howto/static-files/\"><span class=\"doc\">guía paso-a-paso de los archivos estáticos</span></a> y <a class=\"reference internal\" href=\"/es/2.0/ref/contrib/staticfiles/\"><span class=\"doc\">la referencia de los archivos estáticos</span></a>. <a class=\"reference internal\" href=\"/es/2.0/howto/static-files/deployment/\"><span class=\"doc\">Implementación de archivos estáticos</span></a> habla sobre cómo utilizar los archivos estáticos en un servidor real.</p>\n<p>Cuando esté familiarizado con los archivos estáticos, lea la <a class=\"reference internal\" href=\"/es/2.0/intro/tutorial07/\"><span class=\"doc\">parte 7 de este tutorial</span></a> para aprender a personalizar el sitio administrativo generado automáticamente de Django.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Personalice la apariencia de su aplicación","anchor":"customize-your-app-s-look-and-feel","children":[]},{"title":"Agregando una imagen de fondo","anchor":"adding-a-background-image","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Empezando","url":"/es/2.0/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Escribiendo su primera aplicación en Django, parte 5","url":"/es/2.0/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Escribiendo su primera aplicación Django, parte 7","url":"/es/2.0/intro/tutorial07/"},"formats":{"html":"/es/2.0/intro/tutorial06/","markdown":"/es/2.0/intro/tutorial06.md","json":"/es/2.0/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/2.0.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/es/2.0/intro/tutorial06/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}