{"title":"Escrevendo sua primeira aplicação Django, parte 6","version":"1.10","locale":"pt-br","docname":"intro/tutorial06","url":"/pt-br/1.10/intro/tutorial06/","canonical":"https://djangodocs.dev/pt-br/1.10/intro/tutorial06/","summary":"Este tutorial começa onde o Tutorial 5 parou. Nós construímos uma aplicação web de enquete testada, e agora nós vamos adicionar uma folha de estilos e uma…","html":"<h1>Escrevendo sua primeira aplicação Django, parte 6<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-6\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Este tutorial começa onde o <a class=\"reference internal\" href=\"/pt-br/1.10/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a> parou. Nós construímos uma aplicação web de enquete testada, e agora nós vamos adicionar uma folha de estilos e uma imagem.</p>\n<p>Além do HTML gerado pelo servidor, aplicações web normalmente precisam servir outros arquivos – como imagens, JavaScript, ou CSS – necessário para renderizar a página web completa. No Django, nós chamamos estes arquivos de “arquivos estáticos”.</p>\n<p>Para projetos pequenos, isto não é um grande problema, porque você pode simplesmente manter os arquivos estáticos em algum lugar que o seu servidor web consegue encontrar. Entretanto, em grandes projetos – especialmente aqueles comprometidos com múltiplas apps – lidar com múltiplos conjuntos de arquivos estáticos provindos de cada aplicação começa a se tornar complicado.</p>\n<p>É para isto que o <code class=\"docutils literal notranslate\">django.contrib.staticfiles</code>  serve: ele coleciona os arquivos estáticos de cada uma de suas aplicações (e qualquer outro lugar que você especifique) em um único local que pode ser facilmente servido em produção.</p>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Personalize a aparência do seu <em>app</em><a class=\"heading-anchor\" href=\"#customize-your-app-s-look-and-feel\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Primeiro, crie um diretório chamado <code class=\"docutils literal notranslate\">static</code> no seu diretório <code class=\"docutils literal notranslate\">polls</code>. O Django vai procurar os arquivos estáticos ali, de maneira similar a como o Django encontra os templates dentro de <code class=\"docutils literal notranslate\">polls/templates/</code>.</p>\n<p>A configuração <a class=\"reference internal\" href=\"/pt-br/1.10/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_FINDERS</code></a> do Django contém uma lista de buscadores que sabem como descobrir os arquivos estáticos de diversas fontes. Um dos padrões é o <code class=\"docutils literal notranslate\">AppDirectoriesFinder</code> que procura por um subdiretório “static” em cada uma das <a class=\"reference internal\" href=\"/pt-br/1.10/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a>, como a <code class=\"docutils literal notranslate\">polls</code> que nós acabamos de criar. O site admin usa a mesma estrutura de diretórios para os arquivos estáticos.</p>\n<p>Com o diretório <code class=\"docutils literal notranslate\">static</code> que você acabou de criar, crie outro diretório chamado <code class=\"docutils literal notranslate\">polls</code> e com ele crie um arquivo chamado <code class=\"docutils literal notranslate\">style.css</code>. Em outras palavras, o seu stylesheet deve ficar em <code class=\"docutils literal notranslate\">polls/static/polls/style.css</code>. Por conta da forma que o buscador de arquivos estáticos <code class=\"docutils literal notranslate\">AppDirectoriesFinder</code> funciona, você pode referênciar este arquivo estático no Django simplesmente como <code class=\"docutils literal notranslate\">polls/style.css</code>, similarmente como você referência o caminho para templates.</p>\n<aside class=\"admonition-static-file-namespacing admonition\" role=\"note\">\n<p class=\"admonition-title\">Arquivo estático namespace</p>\n<p>Assim como templates, nós <em>podemos</em> nos safar somente colocando os arquivos estáticos diretamente em <code class=\"docutils literal notranslate\">polls/static</code> (ao invés de criar outro subdiretório <code class=\"docutils literal notranslate\">polls</code>), mas na verdade isso seria uma má idéia. O Django vai escolher o primeiro o arquivo estático que encontrar com aquele nome, e se você tem um arquivo estático com aquele mesmo nome em uma aplicação <em>diferente</em>, o Django não conseguiria distinguir entre elas. Nós precisamos poder apontar o Django para o arquivo correto, e a forma mais fácil de garantir isso é por usar um <em>namespacing</em> com eles. Isto é, colocando aqueles arquivos estáticos dentro de <em>outro</em> diretório com o mesmo nome da aplicação.</p>\n</aside>\n<p>Coloque o seguinte código na sua folha de estilo (<code class=\"docutils literal notranslate\">polls/static/polls/style.css</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=\"nt\">a</span> <span class=\"p\">{</span>\n    <span class=\"k\">color</span><span class=\"p\">:</span> <span class=\"kc\">green</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Em seguida, adicione o seguinte no topo de “polls//templates/polls/index.html”:</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>O modelo tag <code class=\"docutils literal notranslate\">{% static %}</code> gera a URL absoluta para arquivos estáticos.</p>\n<p>Isso é tudo que você precisa fazer para o desenvolvimento. Recarregue http://localhost:8000/polls/` e você deve ver que os links das questões estão verdes (Django style!) isso significa que seu stylesheet foi corretamente carregado.</p>\n</section>\n<section id=\"adding-a-background-image\">\n<h2>Adicionar uma imagem de fundo<a class=\"heading-anchor\" href=\"#adding-a-background-image\"><span class=\"visually-hidden\">Link para este cabeçalho</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Após, nós vamos criar o subdiretório para imagens. Crie um subdiretório <code class=\"docutils literal notranslate\">images</code> no diretório <code class=\"docutils literal notranslate\">polls/static/polls</code>. Dentro deste diretório, coloque uma imagem chamada <code class=\"docutils literal notranslate\">background.gif</code>.  Em outras palavras, coloque sua imagem em <code class=\"docutils literal notranslate\">polls/static/polls/images//background.gif</code>.</p>\n<p>Então, adicione em seu stylesheet (<code class=\"docutils literal notranslate\">polls/static/polls/style.css</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=\"p\">{</span>\n    <span class=\"k\">background</span><span class=\"p\">:</span> <span class=\"kc\">white</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=\"kc\">no-repeat</span> <span class=\"kc\">right</span> <span class=\"kc\">bottom</span><span class=\"p\">;</span>\n<span class=\"p\">}</span>\n</code></pre></figure>\n<p>Recarregue <code class=\"docutils literal notranslate\">http://localhost:8000/polls/</code> e você deve ver o fundo carregado no lado superior direito da tela.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Aviso</p>\n<p>Claro que o <code class=\"docutils literal notranslate\">{% static %}</code> template tag não está disponível para uso em arquivos estáticos como o seu stylesheet que não são gerados pelo Django. Você deve sempre usar <strong>caminhos relativos</strong> para conectar seus arquivos estáticos entre cada um, porque assim, você pode mudar <a class=\"reference internal\" href=\"/pt-br/1.10/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> (usado pelo <a class=\"reference internal\" href=\"/pt-br/1.10/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\">static</code></a> template tag para gerar as URLs) sem ter que modificar um monte de caminhos em seus arquivos estáticos também.</p>\n</aside>\n<p>Estes são os <strong>básicos</strong>. Para mais detalhes nas configurações e outras coisas incluídas no framework veja <a class=\"reference internal\" href=\"/pt-br/1.10/howto/static-files/\"><span class=\"doc\">o howto arquivos estáticos</span></a>. <span class=\"xref std std-doc\">Fazendo deploy de arquivos estáticos</span> discute como usar arquivos estáticos em um servidor real.</p>\n<p>Quando você estiver confortável com os arquivos estáticos, leia <a class=\"reference internal\" href=\"/pt-br/1.10/intro/tutorial07/\"><span class=\"doc\">parte 7 deste tutorial</span></a> para aprender como customizar o site do admin auto-gerado do Django.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Personalize a aparência do seu app","anchor":"customize-your-app-s-look-and-feel","children":[]},{"title":"Adicionar uma imagem de fundo","anchor":"adding-a-background-image","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Introdução","url":"/pt-br/1.10/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Escrevendo sua primeira aplicação Django, parte 5","url":"/pt-br/1.10/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Escrevendo seu primeiro app Django, parte 7","url":"/pt-br/1.10/intro/tutorial07/"},"formats":{"html":"/pt-br/1.10/intro/tutorial06/","markdown":"/pt-br/1.10/intro/tutorial06.md","json":"/pt-br/1.10/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/pt-br/1.10/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","fr","ja","id","pt-br","es","el","pl"]}