{"title":"Escrevendo sua primeira aplicação Django, parte 6","version":"6.0","locale":"pt-br","docname":"intro/tutorial06","url":"/pt-br/6.0/intro/tutorial06/","canonical":"https://djangodocs.dev/pt-br/6.0/intro/tutorial06/","summary":"This tutorial begins where Tutorial 5 left off. We’ve built a tested web-poll application, and we’ll now add a stylesheet and an image. Além do HTML gerado pelo…","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>This tutorial begins where <a class=\"reference internal\" href=\"/pt-br/6.0/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a> left off.\nWe’ve built a tested web-poll application, and we’ll now add a stylesheet and\nan image.</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>For small projects, this isn’t a big deal, because you can keep the static\nfiles somewhere your web server can find it. However, in bigger projects –\nespecially those comprised of multiple apps – dealing with the multiple sets\nof static files provided by each application starts to get tricky.</p>\n<p>É para isto que o <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></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<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Onde obter ajuda:</p>\n<p>Se tiver problemas enquanto caminha por este tutorial, por favor consulte a seção <a class=\"reference internal\" href=\"/pt-br/6.0/faq/help/\"><span class=\"doc\">Obtendo ajuda</span></a> da FAQ.</p>\n</aside>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Personalize a aparência da sua <em>aplicação</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\"><span class=\"pre\">static</span></code> no seu diretório <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></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\"><span class=\"pre\">polls/templates/</span></code>.</p>\n<p>A configuração <a class=\"reference internal\" href=\"/pt-br/6.0/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></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\"><span class=\"pre\">AppDirectoriesFinder</span></code> que procura por um subdiretório “static” em cada uma das <a class=\"reference internal\" href=\"/pt-br/6.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 a <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> que nós acabamos de criar. O site de administração usa a mesma estrutura de diretórios para os arquivos estáticos.</p>\n<p>Within the <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> directory you have just created, create another directory\ncalled <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> and within that create a file called <code class=\"docutils literal notranslate\"><span class=\"pre\">style.css</span></code>. In other\nwords, your stylesheet should be at <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>. Because\nof how the <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code> staticfile finder works, you can refer to\nthis static file in Django as <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/style.css</span></code>, similar to how you reference\nthe path for templates.</p>\n<aside class=\"admonition-static-file-namespacing admonition\">\n<p class=\"admonition-title\">Arquivo estático namespace</p>\n<p>Just like templates, we <em>might</em> be able to get away with putting our static\nfiles directly in <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static</span></code> (rather than creating another <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>\nsubdirectory), but it would actually be a bad idea. Django will choose the\nfirst static file it finds whose name matches, and if you had a static file\nwith the same name in a <em>different</em> application, Django would be unable to\ndistinguish between them. We need to be able to point Django at the right\none, and the best way to ensure this is by <em>namespacing</em> them. That is, by\nputting those static files inside <em>another</em> directory named for the\napplication itself.</p>\n</aside>\n<p>Coloque o seguinte código na sua folha 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 class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code></figcaption>\n<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=\"Css code\"><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>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 class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/polls/index.html</span></code></figcaption>\n<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=\"Django template code\"><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\">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\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> gera a URL absoluta para arquivos estáticos.</p>\n<p>Isso é tudo que você precisa fazer para o desenvolvimento.</p>\n<p>Inicie o servidor (ou reinicie se estiver em execução):</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>runserver\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py runserver\n</code></pre></div></div></div>\n<p>Reload <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> and you should see that the question\nlinks are green (Django style!) which means that your stylesheet was properly\nloaded.</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>Next, we’ll create a subdirectory for images. Create an <code class=\"docutils literal notranslate\"><span class=\"pre\">images</span></code> subdirectory\nin the <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/</span></code> directory. Inside this directory, add any image\nfile that you’d like to use as a background. For the purposes of this tutorial,\nwe’re using a file named <code class=\"docutils literal notranslate\"><span class=\"pre\">background.png</span></code>, which will have the full path\n<code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/images/background.png</span></code>.</p>\n<p>Then, add a reference to your image in your stylesheet\n(<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 class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code></figcaption>\n<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=\"Css code\"><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.png&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>Recarregue “<a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a>” e você deverá ver o fundo carregado no canto superior esquerdo da tela.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Aviso</p>\n<p>The <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> template tag is not available for use in static files\nwhich aren’t generated by Django, like your stylesheet. You should always\nuse <strong>relative paths</strong> to link your static files between each other,\nbecause then you can change <a class=\"reference internal\" href=\"/pt-br/6.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> (used by the\n<a class=\"reference internal\" href=\"/pt-br/6.0/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> template tag to generate its URLs) without having to modify\na bunch of paths in your static files as well.</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/6.0/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/6.0/intro/tutorial07/\"><span class=\"doc\">parte 7 deste tutorial</span></a> para aprender como personalizar o site de administração gerado automaticamente pelo Django.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Personalize a aparência da sua aplicação","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/6.0/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Escrevendo sua primeira aplicação Django, parte 5","url":"/pt-br/6.0/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Escrevendo seu primeiro app Django, parte 7","url":"/pt-br/6.0/intro/tutorial07/"},"formats":{"html":"/pt-br/6.0/intro/tutorial06/","markdown":"/pt-br/6.0/intro/tutorial06.md","json":"/pt-br/6.0/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/pt-br/6.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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}