{"title":"Pisanie pierwszej aplikacji Django, część 6.","version":"4.0","locale":"pl","docname":"intro/tutorial06","url":"/pl/4.0/intro/tutorial06/","canonical":"https://djangodocs.dev/pl/4.0/intro/tutorial06/","summary":"Ten tutorial zaczyna się, gdzie skończył się Tutorial 5 . Zbudowaliśmy testowaną aplikację web-ankietową, teraz dodamy arkusz stylów i grafikę. Oprócz od HTML-u…","html":"<h1>Pisanie pierwszej aplikacji Django, część 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>Ten tutorial zaczyna się, gdzie skończył się <a class=\"reference internal\" href=\"/pl/4.0/intro/tutorial05/\"><span class=\"doc\">Tutorial 5</span></a>. Zbudowaliśmy testowaną aplikację web-ankietową, teraz dodamy arkusz stylów i grafikę.</p>\n<p>Oprócz od HTML-u wygenerowanego przez serwer, aplikacje webowe zazwyczaj muszą serwować dodatkowe pliki – takie jak grafiki, JavaScript lub CSS – niezbędne do wyrenderowania pełnej strony internetowej. W Django nazywamy te pliki „plikami statycznymi”.</p>\n<p>W małych projektach to nieduży problem, bo możesz trzymać pliki statyczne gdzieś, gdzie może odnaleźć je web serwer. Jednak w dużych projektach – szczególnie tych złożonych z wielu aplikacji – raczenie sobie z wieloma zbiorami plików statycznych każdej aplikacji zaczyna być wyzwaniem.</p>\n<p>Do tego mamy <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code>: zbiera ono pliki statyczne z każdej z twoich aplikacji (i każdego innego miejsca, które wskażesz) w jedną lokację, która może być prosto zaserwowana na produkcji.</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">Gdzie szukać pomocy:</p>\n<p>Jeśli masz trudności w przejściu tego tutorialu, przejdź do sekcji <a class=\"reference internal\" href=\"/pl/4.0/faq/help/\"><span class=\"doc\">Uzyskiwanie pomocy</span></a> często zadawanych pytań.</p>\n</aside>\n<section id=\"customize-your-app-s-look-and-feel\">\n<h2>Dostosuj wygląd i pracę z twoją <em>aplikacją</em><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>Najpierw stwórz katalog o nazwie <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code> w swoim katalogu <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>. Django będzie tam szukało plików statycznych, w podobny sposób jak szuka szablonów w <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/templates/</span></code>.</p>\n<p>Ustawienie Django <a class=\"reference internal\" href=\"/pl/4.0/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></code></a> zawiera listę finderów, które wiedzą jak odnajdywać pliki statyczne w różnych źródłach. Jednym z domyślnych jest <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code>, który szuka „statycznego” podkatalogu w każdej z <a class=\"reference internal\" href=\"/pl/4.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a>, takiego jak ten, który właśnie stworzyliśmy w <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>. Panel administracyjny używa takiej samej struktury katalogów dla swoich statycznych plików.</p>\n<p>W katalogu <code class=\"docutils literal notranslate\"><span class=\"pre\">static</span></code>, który właśnie stworzyłeś, stwórz inny katalog o nazwie <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code> i w nim stwórz plik o nazwie <code class=\"docutils literal notranslate\"><span class=\"pre\">style.css</span></code>. Innymi słowy twój arkusz stylów powinien być w <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/style.css</span></code>. Z powodu jak działa finder plików statycznych <code class=\"docutils literal notranslate\"><span class=\"pre\">AppDirectoriesFinder</span></code>, możesz odwoływać się do tego pliku statycznego w Django jako do <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/style.css</span></code>, podobnie jak wskazujesz ścieżkę do szablonów.</p>\n<aside class=\"admonition-static-file-namespacing admonition\">\n<p class=\"admonition-title\">Przestrzeń nazw plików statycznych</p>\n<p>Tak samo jak z szablonami, <em>moglibyśmy</em> poradzić sobie umieszczając nasze pliki statyczne bezpośrednio w <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static</span></code> (zamiast tworzyć kolejny podkatalog <code class=\"docutils literal notranslate\"><span class=\"pre\">polls</span></code>), ale w rzeczywistości byłoby to złym pomysłem. Django wybierze pierwszy statyczny plik, którego nazwa się zgadza i jeśli miałbyś plik statyczny o takiej samej nazwie w <em>innej</em> aplikacji, Django nie byłoby w stanie ich odróżnić. Musimy być w stanie wskazać Django odpowiedni plik i najlepszym sposobem, aby to zapewnić jest <em>znamespace’owanie</em> ich. To znaczy umieszczenie tych plików statycznych w <em>innym</em> katalogu nazwanym dla samej aplikacji.</p>\n</aside>\n<p>Umieść następujący kod w tym arkuszu stylów (<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>Następnie dodaj poniższe na początku <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 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\">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>Szablonowy tag <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> generuje bezwzględny URL plików statycznych.</p>\n<p>To wszystko, co potrzebujesz zrobić dla dewelopmentu.</p>\n<p>Wystartuj serwer (lub zrestartuj, jeśli już działa):</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>Przeładuj <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code>, powinieneś zobaczyć, że linki pytań są zielone (styl Django!), co oznacza, że twój arkusz styli załadował się poprawnie.</p>\n</section>\n<section id=\"adding-a-background-image\">\n<h2>Dodawanie obrazu tła<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>Następnie stworzymy podkatalog na grafiki. Stwórz podkatalog <code class=\"docutils literal notranslate\"><span class=\"pre\">images</span></code> w katalogu <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/</span></code>. W tym katalogu umieść grafikę o nazwie <code class=\"docutils literal notranslate\"><span class=\"pre\">background.gif</span></code>. Innymi słowy umieść swój obrazek w <code class=\"docutils literal notranslate\"><span class=\"pre\">polls/static/polls/images/background.gif</span></code>.</p>\n<p>Potem dodaj do swojego arkusza stylów (<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.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>Odśwież <code class=\"docutils literal notranslate\"><span class=\"pre\">http://localhost:8000/polls/</span></code> a powinieneś zobaczyć tło załadowane w lewym górnym rogu ekranu.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Ostrzeżenie</p>\n<p>Szablonowy tag <code class=\"docutils literal notranslate\"><span class=\"pre\">{%</span> <span class=\"pre\">static</span> <span class=\"pre\">%}</span></code> nie jest dostępny do użycia w plikach statycznych, które nie są wygenerowane przez Django, takich jak twój arkusz stylów. Powinieneś zawsze używać <strong>ścieżek względnych</strong> do łączenia plików statycznych pomiędzy nimi, ponieważ wtedy możesz zmienić <a class=\"reference internal\" href=\"/pl/4.0/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> (używany przez szablonowy tag <a class=\"reference internal\" href=\"/pl/4.0/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> do wygenerowania jego URL-i) bez bycia zmuszonym do modyfikacji też rzeszy ścieżek w twoich plikach statycznych.</p>\n</aside>\n<p>To są <strong>podstawy</strong>. Po więcej szczegółów na temat ustawień i innych kawałków zawartych we frameworku, zobacz <a class=\"reference internal\" href=\"/pl/4.0/howto/static-files/\"><span class=\"doc\">howto plików statycznych</span></a> i <a class=\"reference internal\" href=\"/pl/4.0/ref/contrib/staticfiles/\"><span class=\"doc\">dokumentację staticfiles</span></a>. <a class=\"reference internal\" href=\"/pl/4.0/howto/static-files/deployment/\"><span class=\"doc\">Demployment plików statycznych</span></a> porusza kwestię, jak używać plików statycznych na prawdziwym serwerze.</p>\n<p>Kiedy już czujesz się dobrze z plikami statycznymi, przeczytaj <a class=\"reference internal\" href=\"/pl/4.0/intro/tutorial07/\"><span class=\"doc\">część 7 tego tutoriala</span></a>, aby dowiedzieć się, jak dostosowywać wygenerowany automatycznie panel administracyjny Django.</p>\n</section>","rootId":"writing-your-first-django-app-part-6","toc":[{"title":"Dostosuj wygląd i pracę z twoją aplikacją","anchor":"customize-your-app-s-look-and-feel","children":[]},{"title":"Dodawanie obrazu tła","anchor":"adding-a-background-image","children":[]}],"breadcrumbs":[{"docname":"intro/index","title":"Pierwsze kroki","url":"/pl/4.0/intro/"}],"prev":{"docname":"intro/tutorial05","title":"Pisanie pierwszej aplikacji Django, część 5.","url":"/pl/4.0/intro/tutorial05/"},"next":{"docname":"intro/tutorial07","title":"Pisanie pierwszej aplikacji Django, część 7.","url":"/pl/4.0/intro/tutorial07/"},"formats":{"html":"/pl/4.0/intro/tutorial06/","markdown":"/pl/4.0/intro/tutorial06.md","json":"/pl/4.0/intro/tutorial06.json"},"source":"https://github.com/django/django/blob/stable/4.0.x/docs/intro/tutorial06.txt","official":"https://docs.djangoproject.com/pl/4.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"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}