{"title":"Pisanie pierwszej aplikacji Django, część 1.","version":"1.11","locale":"pl","docname":"intro/tutorial01","url":"/pl/1.11/intro/tutorial01/","canonical":"https://djangodocs.dev/pl/1.11/intro/tutorial01/","summary":"Nauczmy się na przykładzie. Z pomocą tego tutoriala przeprowadzimy cię przez stworzenie prostej aplikacji ankietowej.","html":"<h1>Pisanie pierwszej aplikacji Django, część 1.<a class=\"heading-anchor\" href=\"#writing-your-first-django-app-part-1\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Nauczmy się na przykładzie.</p>\n<p>Z pomocą tego tutoriala przeprowadzimy cię przez stworzenie prostej aplikacji ankietowej.</p>\n<p>Będzie się ona składać z dwóch części:</p>\n<ul class=\"simple\">\n<li><p>Publicznej strony, która pozwala ludziom obejrzeć ankiety i głosować w nich.</p></li>\n<li><p>Panelu administracyjnego, który pozwala ci dodawać, zmieniać i usuwać ankiety.</p></li>\n</ul>\n<p>Będziemy zakładać, że masz już <a class=\"reference internal\" href=\"/pl/1.11/intro/install/\"><span class=\"doc\">zainstalowane Django</span></a>. Możesz sprawdzić, czy Django jest zainstalowane i w jakiej wersji uruchamiając następującą komendę w prompcie powłoki (wskazywanym przez prefix $):</p>\n<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 -m django --version\n</code></pre></div>\n<p>Jeśli Django jest zainstalowane, powinieneś zobaczyć wersję swojej instalacji. Jeśli nie jest, dostaniesz błąd „No module named django”.</p>\n<p>Ten tutorial jest napisany dla Django 1.11 i Pythona 3.4 lub późniejszych. Jeśli wersja Django się nie zgadza, możesz przełączyć się na swoją wersję Django używając przełącznika wersji w prawym dolnym rogu tej strony, lub możesz zaktualizować Django do najnowszej wersji. Jeśli wciąż używasz Pythona 2.7, będziesz musiał dostosować nieco próbki kodu, według opisu w komentarzach.</p>\n<p>Zobacz <a class=\"reference internal\" href=\"/pl/1.11/topics/install/\"><span class=\"doc\">Jak zainstalować Django</span></a>, by znaleźć wskazówki jak usunąć stare wersje Django i zainstalować nową.</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">Gdzie szukać pomocy:</p>\n<p>Jeśli masz problemy z przejściem tego tutoriala, prosimy napisz wiadomość do <a class=\"reference internal\" href=\"/pl/1.11/internals/mailing-lists/#django-users-mailing-list\"><span class=\"std std-ref\">django-users</span></a> lub wpadnij na <a class=\"reference external\" href=\"irc://irc.freenode.net/django\">#django na irc.freenode.net</a>, aby czatować z innymi użytkownikami Django, który mogą być w stanie udzielić pomocy.</p>\n</aside>\n<section id=\"creating-a-project\">\n<h2>Tworzenie projektu<a class=\"heading-anchor\" href=\"#creating-a-project\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Jeśli po raz pierwszy korzystasz z Django, będziesz musiał zająć się wstępną konfiguracją. Konkretnie, będziesz potrzebował wygenerować trochę kodu, który stworzy <a class=\"reference internal\" href=\"/pl/1.11/glossary/#term-project\"><span class=\"xref std std-term\">projekt</span></a> Django – zbiór ustawień dla instacji Django, wliczając konfigurację bazy danych, ustawienia specyficzne dla Django i specyficzne dla aplikacji.</p>\n<p>Z linii komend, wejdź <code class=\"docutils literal notranslate\">cd</code> do katalogu, gdzie chciałbyś przechowywać swój kod, następnie uruchom następującą komendę:</p>\n<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>django-admin startproject mysite\n</code></pre></div>\n<p>Stworzy ona katalog <code class=\"docutils literal notranslate\">mysite</code> w twoim bieżącym katalogu. Jeśli nie zadziałała, zobacz <a class=\"reference internal\" href=\"/pl/1.11/faq/troubleshooting/#troubleshooting-django-admin\"><span class=\"std std-ref\">Problemy z uruchomieniem django-admin</span></a>.</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Informacja</p>\n<p>Musisz unikać nazywania projektów tak samo jak wbudowane w Pythona albo Django komponenty. W szczególności znaczy to, że powinieneś unikać używania nazw jak <code class=\"docutils literal notranslate\">django</code> (co wejdzie w konflikt z samym Django) lub <code class=\"docutils literal notranslate\">test</code> (wejdzie w konflikt z wbudowanym pakietem Pythona).</p>\n</aside>\n<aside class=\"admonition-where-should-this-code-live admonition\" role=\"note\">\n<p class=\"admonition-title\">Gdzie powinien żyć ten kod?</p>\n<p>Jeśli w przeszłości używałeś zwykłego starego PHP (bez użycia nowoczesnych frameworków), prawdopodobnie zwykłeś umieszczać kod w głównym katalogu serwera WWW (takim jak <code class=\"docutils literal notranslate\">/var/www</code>). W Django nie robi się w ten sposób. Nie jest dobrym pomysłem umieszczać jakiegokolwiek z tego kodu Pythona w katalogu głównym serwera WWW, ponieważ stwarza to ryzyko pojawienia się możliwości, aby ktoś był w stanie widzieć twój kod w Internecie. Nie jest to bezpieczne.</p>\n<p>Umieść swój kod w jakimś katalogu <strong>poza</strong> katalogiem głównym, na przykład w <code class=\"file docutils literal notranslate\">/home/mycode</code>.</p>\n</aside>\n<p>Spójrzmy co stworzyło <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code>mysite<span class=\"o\">/</span>\n    manage<span class=\"o\">.</span>py\n    mysite<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n        settings<span class=\"o\">.</span>py\n        urls<span class=\"o\">.</span>py\n        wsgi<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Te pliki to:</p>\n<ul class=\"simple\">\n<li><p>Zewnętrzny katalog główny <code class=\"file docutils literal notranslate\">mysite/</code> jest tylko pojemnikiem na twój projekt. Jego nazwa nie ma znaczenia dla Django; możesz zmienić jego nazwę na dowolną, jaką chcesz.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">manage.py</code>: Narzędzie linii komend, które pozwala ci oddziaływać z tym projektem Django na wiele sposobów. Możesz przeczytać szczegóły na temat <code class=\"file docutils literal notranslate\">manage.py</code> w <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/\"><span class=\"doc\">django-admin and manage.py</span></a>.</p></li>\n<li><p>Wewnętrzny katalog <code class=\"file docutils literal notranslate\">mysite/</code> jest właściwym pakietem Pythona dla twojego projektu. Jego nazwa jest nazwą pakietu Pythona, którą musisz używać, aby zaimportować cokolwiek w tym pakiecie (np. <code class=\"docutils literal notranslate\">mysite.urls</code>).</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/__init__.py</code>: Pusty plik, który mówi Pythonowi, że ten katalog powinien być uważany za pakiet Pythona. Jeśli jesteś początkujący w Pythonie, przeczytaj <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-packages\" title=\"(w Python v3.14)\"><span class=\"xref std std-ref\">więcej o pakietach</span></a> w oficjalnej dokumentacji Pythona.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/settings.py</code>: Ustawienia/konfiguracja dla tego projektu Django. <a class=\"reference internal\" href=\"/pl/1.11/topics/settings/\"><span class=\"doc\">Django settings</span></a> powie ci wszystko o tym, jak działają ustawienia.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/urls.py</code>: Deklaracje URL-i dla tego projektu Django; „spis treści” twojej strony opartej na Django. Możesz przeczytać więcej o URL-ach w <a class=\"reference internal\" href=\"/pl/1.11/topics/http/urls/\"><span class=\"doc\">URL dispatcher</span></a>.</p></li>\n<li><p><code class=\"file docutils literal notranslate\">mysite/wsgi.py</code>: Punkt wejściowy dla serwerów WWW kompatybilnych z WSGI do serwowania twojego projektu. Zobacz <a class=\"reference internal\" href=\"/pl/1.11/howto/deployment/wsgi/\"><span class=\"doc\">How to deploy with WSGI</span></a> dla większej ilości szczegółów.</p></li>\n</ul>\n</section>\n<section id=\"the-development-server\">\n<h2>Serwer deweloperski<a class=\"heading-anchor\" href=\"#the-development-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Zweryfikujmy czy twój projekt Django działa. Przejdź do zewnętrzenego katalogu <code class=\"file docutils literal notranslate\">mysite</code>, jeśli jeszcze tego nie zrobiłeś, i uruchom następujące polecenia:</p>\n<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 manage.py runserver\n</code></pre></div>\n<p>Zobaczysz następujące wyjście w linii komend:</p>\n<pre class=\"literal-block\">Performing system checks...\n\nSystem check identified no issues (0 silenced).\n\nYou have unapplied migrations; your app may not work properly until they are applied.\nRun 'python manage.py migrate' to apply them.\n\n09 sie 2026 - 15:50:53\nDjango version 1.11, using settings 'mysite.settings'\nStarting development server at <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a>\nQuit the server with CONTROL-C.</pre>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Informacja</p>\n<p>Zignoruj na razie ostrzeżenie o niezastosowanych migracjach bazy danych; zajmiemy się bazą danych za chwilę.</p>\n</aside>\n<p>Wystartowałeś serwer deweloperski Django, lekki web-serwer napisany w całości w Pythonie. Zawarliśmy go w Django, abyś mógł dewelopować rzeczy błyskawicznie, nie musząc zajmować się konfiguracją produkcyjnego serwera – jak na przykład Apache – dopóki nie będziesz gotowy na produkcję.</p>\n<p>Teraz jest dobry moment, by zwrócić na to uwagę: <strong>nie</strong> używaj tego serwera w czymkolwiek podobnym do produkcyjnego środowiska. Jest on przewidziany tylko do użytku podczas dewelopmentu. (Jesteśmy w świecie tworzenia web-frameworków, nie web-serwerów.)</p>\n<p>Kiedy serwer jest już uruchomiony, odwiedź <a class=\"reference external\" href=\"http://127.0.0.1:8000/\">http://127.0.0.1:8000/</a> w swojej przeglądarce internetowej. Zobaczysz stronę „Welcome to Django”, w przyjemnych jasnoniebieskich pastelowych kolorach. Zadziałało!</p>\n<aside class=\"admonition-changing-the-port admonition\" role=\"note\">\n<p class=\"admonition-title\">Zmiana portu</p>\n<p>Domyślnie komenda <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a> uruchamia serwer deweloperski na wewnętrznym IP na porcie 8000.</p>\n<p>Jeśli chcesz zmienić port serwera, podaj go jako argument w linii komend. Na przykład, to polecenie uruchamia serwer na porcie 8080:</p>\n<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 manage.py runserver <span class=\"m\">8080</span>\n</code></pre></div>\n<p>Jeśli chcesz zmienić IP serwera, podaj je razem z portem. Na przykład aby nasłuchiwać na wszystkich dostępnych publicznych IP (przydatne, jeśli używasz Vagranta lub chcesz zaprezentować swoją pracę na innych komputerach w sieci), użyj:</p>\n<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 manage.py runserver <span class=\"m\">0</span>:8000\n</code></pre></div>\n<p><strong>0</strong> jest skrótem od <strong>0.0.0.0</strong>. Pełną dokumentację serwera deweloperskiego można znaleźć w dokumentacji <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a>.</p>\n</aside>\n<aside class=\"admonition-automatic-reloading-of-djadmin-runserver admonition\" role=\"note\">\n<p class=\"admonition-title\">Automatyczne przeładowywanie <a class=\"reference internal\" href=\"/pl/1.11/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\">runserver</code></a></p>\n<p>Serwer deweloperski automatycznie przeładowuje kod Pythona dla każdego żądania, wedle potrzeby. Nie musisz restartować serwera, aby zmiany w kodzie miały efekt. Jednakże niektóre działania, jak dodawanie plików, nie powodują restartu, więc będziesz musiał zrestartować serwer w tych przypadkach.</p>\n</aside>\n</section>\n<section id=\"creating-the-polls-app\">\n<h2>Tworzenie aplikacji Ankiety<a class=\"heading-anchor\" href=\"#creating-the-polls-app\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Teraz, kiedy twoje środowisko – „projekt” – jest uruchomione, jesteś gotowy zabrać się do pracy.</p>\n<p>Każda aplikacjia, którą piszesz w Django, składa się z pakietu Pythona, który realizuję pewną konwencję. Django zawiera narzędzie, które automatycznie generuje podstawową strukturę katalogów aplikacji, abyś mógł skupić się na pisaniu kodu zamiast na tworzeniu katalogów.</p>\n<aside class=\"admonition-projects-vs-apps admonition\" role=\"note\">\n<p class=\"admonition-title\">Projekty versus aplikacje</p>\n<p>Jaka jest różnica pomiędzy projektem a aplikacją? Aplikacja jest aplikacją webową, która coś robi – na przykład system blogowy, baza danych publicznych wpisów lub prosta aplikacja ankietowa. Projekt jest zbiorem konfiguracji i aplikacji dla konkretnej witryny. Projekt może zawierać wiele aplikacji. Aplikacja może być w wielu projektach.</p>\n</aside>\n<p>Twoje aplikacje mogą żyć gdziekolwiek na twojej <a class=\"reference external\" href=\"https://docs.python.org/3/tutorial/modules.html#tut-searchpath\" title=\"(w Python v3.14)\"><span class=\"xref std std-ref\">ścieżce Pythona</span></a>. W tym tutorialu stworzymy aplikację ankietową tuż obok twojego pliku <code class=\"file docutils literal notranslate\">manage.py</code>, aby mogła być zaimportowana jako jego własny moduł najwyższego poziomu, zamiast podmodułu <code class=\"docutils literal notranslate\">mysite</code>.</p>\n<p>Aby stworzyć swoją aplikację, upewnij się, że jesteś w tym samym katalogu co <code class=\"file docutils literal notranslate\">manage.py</code> i wpisz tę komendę:</p>\n<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 manage.py startapp polls\n</code></pre></div>\n<p>Stworzy ona katalog <code class=\"file docutils literal notranslate\">polls</code>, który jest tak rozplanowany:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>Ta struktora katalogów będzie domem dla aplikacji ankietowej.</p>\n</section>\n<section id=\"write-your-first-view\">\n<h2>Napisz swój pierwszy widok<a class=\"heading-anchor\" href=\"#write-your-first-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Napiszmy pierwszy widok. Otwórz plik <code class=\"docutils literal notranslate\">polls/views.py</code> i umieść tam następujący pythonowy kod:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/views.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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/views.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n\n\n<span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Hello, world. You&#39;re at the polls index.&quot;</span><span class=\"p\">)</span>\n</code></pre></figure>\n<p>To jest najprostszy widok, jaki jest możliwy w Django. Aby go wywołać, potrzebujemy zmapować go na URL – i do tego potrzebujemy URLconf.</p>\n<p>Aby stworzyć URLconf w katalogu ankiet, stwórzmy plik o nazwie <code class=\"docutils literal notranslate\">urls.py</code>. Katalog twojej aplikacji powinien teraz wyglądać tak:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"Code code\"><code>polls<span class=\"o\">/</span>\n    <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    admin<span class=\"o\">.</span>py\n    apps<span class=\"o\">.</span>py\n    migrations<span class=\"o\">/</span>\n        <span class=\"fm\">__init__</span><span class=\"o\">.</span>py\n    models<span class=\"o\">.</span>py\n    tests<span class=\"o\">.</span>py\n    urls<span class=\"o\">.</span>py\n    views<span class=\"o\">.</span>py\n</code></pre></div>\n<p>W pliku <code class=\"docutils literal notranslate\">polls/urls.py</code> zawrzyj następujący kod:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>polls/urls.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> url\n\n<span class=\"kn\">from</span> <span class=\"nn\">.</span> <span class=\"kn\">import</span> views\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^$&#39;</span><span class=\"p\">,</span> views<span class=\"o\">.</span>index<span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s1\">&#39;index&#39;</span><span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Następnym krokiem jest wskazanie URLconfowi w korzeniu na moduł <code class=\"docutils literal notranslate\">polls.urls</code>. W <code class=\"docutils literal notranslate\">mysite/urls.py</code> dodaj import dla <code class=\"docutils literal notranslate\">django.conf.urls.include</code> i wstaw <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> na listę <code class=\"docutils literal notranslate\">urlpatterns</code>, aby mieć:</p>\n<figure class=\"code-block code-block-captioned\" data-language=\"default\"><figcaption class=\"code-block-caption\"><code>mysite/urls.py</code></figcaption><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</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=\"mysite/urls.py\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.conf.urls</span> <span class=\"kn\">import</span> include<span class=\"p\">,</span> url\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"kn\">import</span> admin\n\nurlpatterns <span class=\"o\">=</span> <span class=\"p\">[</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^polls/&#39;</span><span class=\"p\">,</span> include<span class=\"p\">(</span><span class=\"s1\">&#39;polls.urls&#39;</span><span class=\"p\">)),</span>\n    url<span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s1\">&#39;^admin/&#39;</span><span class=\"p\">,</span> admin<span class=\"o\">.</span>site<span class=\"o\">.</span>urls<span class=\"p\">),</span>\n<span class=\"p\">]</span>\n</code></pre></figure>\n<p>Funkcja <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> function pozwala na odniesienia do innych URLconfów. Zwróć uwagę, że wyrażenia regularne dla funkcji <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> nie zawierają <code class=\"docutils literal notranslate\">$</code> (znaku końca linii) ale ukośnik rozdzielający. Kiedykolwiek Django napotyka <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a>, odcina tę część URL-a, która została dopasowana do tego punktu i wysyła pozostłą część ciągu znaków do zaincludowanego URLconfa, do dalszego przetworzenia.</p>\n<p>Pomysłem leżącym za <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a> jest ułatwienie podłączania URL-i. Skoro ankiety są w swoim własnym URLconfie (<code class=\"docutils literal notranslate\">polls/urls.py</code>), mogą być umieszczone pod „/polls/” lub pod „/fun_polls/” lub pod „/content/polls/” lub dowolnym innym początkiem ścieżki i aplikacja wciąż będzie działać.</p>\n<aside class=\"admonition-when-to-use-func-django-conf-urls-include admonition\" role=\"note\">\n<p class=\"admonition-title\">Kiedy używać <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.include\" title=\"django.conf.urls.include\"><code class=\"xref py py-func docutils literal notranslate\">include()</code></a></p>\n<p>Powinieneś używać <code class=\"docutils literal notranslate\">include()</code> zawsze, gdy uwzględniasz inne wzorce URL. <code class=\"docutils literal notranslate\">admin.site.urls</code> jest jedynym wyjątkiem od tej reguły.</p>\n</aside>\n<aside class=\"admonition-doesn-t-match-what-you-see admonition\" role=\"note\">\n<p class=\"admonition-title\">Nie zgadza się z tym, co widzisz?</p>\n<p>Jeśli widzisz <code class=\"docutils literal notranslate\">include(admin.site.urls)</code> zamiast tylko <code class=\"docutils literal notranslate\">admin.site.urls</code>, prawdopodobnie używasz wersję Django, która nie jest zgodna z wersją tego tutoriala. Powinieneś przełączyć się albo na starszą wersję tutoriala, albo nowszą wersję Django.</p>\n</aside>\n<p>Podłączyłeś właśnie widok <code class=\"docutils literal notranslate\">index</code> do URLconf. Zweryfikujmy, czy działa. Uruchom następujące polecenie:</p>\n<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 manage.py runserver\n</code></pre></div>\n<p>Przejdź do <a class=\"reference external\" href=\"http://localhost:8000/polls/\">http://localhost:8000/polls/</a> w swojej przeglądarce. Powinieneś zobaczyć napis „<em>Hello, world. You’re at the polls index.</em>”, który zdefiniowałeś w widoku <code class=\"docutils literal notranslate\">index</code>.</p>\n<p>Do funkcji <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a> są przekazane cztery argumenty, dwa wymagane: <code class=\"docutils literal notranslate\">regex</code> i <code class=\"docutils literal notranslate\">view</code> oraz dwa opcjonalne: <code class=\"docutils literal notranslate\">kwargs</code> i <code class=\"docutils literal notranslate\">name</code>. Warto w tym momencie dowiedzieć się, do czego służą.</p>\n<section id=\"url-argument-regex\">\n<h3>Argument <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a>: regex<a class=\"heading-anchor\" href=\"#url-argument-regex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Termin „regex” jest powszechnie używaną krótką formą oznaczającą „wyrażenie regularne”, które jest składnią do dopasowywania wzorców w ciągach znaków, lub w tym przypadku, wzorcach URL-i. Django zaczyna od pierwszego wyrażenia regularnego i idzie w dół listy, porównując zażądany URL z wszystkimi wyrażeniami regularnymi aż odnajdzie takie, które pasuje.</p>\n<p>Zwróć uwagę, że te wyrażenia regularne nie przeszukują parametrów GET i POST lub nazwy domeny. Na przykład, w żądaniu do <code class=\"docutils literal notranslate\">https://www.example.com/myapp/</code>, URLconf będzie szukał <code class=\"docutils literal notranslate\">myapp/</code>. W żądaniu do <code class=\"docutils literal notranslate\">https://www.example.com/myapp/?page=3</code>, URLconf też będzie szukał <code class=\"docutils literal notranslate\">myapp/</code>.</p>\n<p>Jeśli potrzebujesz pomocy z wyrażeniami regularnymi, zobacz <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Regular_expression\">wpis na Wikipedii</a> i dokumentację modułu <a class=\"reference external\" href=\"https://docs.python.org/3/library/re.html#module-re\" title=\"(w Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">re</code></a>. Również fantastyczna jest książka O’Reilly’ego „Mastering Regular Expressions” napisana przez Jeffreya Friedla. Jednakże w praktyce nie musisz być ekspertem od wyrażeń regularnych, bo tak naprawdę potrzebujesz jedynie wiedzieć jak wyłapywać proste wzorce. Tak naprawdę złożone wyrażenia regularne mogą mieć słabą wydajność wyszukiwania, więc prawdopodobnie nie powinieneś polegać na pełnej ich mocy.</p>\n<p>Ostatatecznie, uwaga na temat wydajności: te wyrażenia regularne są kompilowane, gdy po raz pierwszy ładowany jest moduł URLconf. Są super-szybkie (tak długo jak same wyrażenia nie są zbyt skomplikowane, tak jak zauważyliśmy wyżej).</p>\n</section>\n<section id=\"url-argument-view\">\n<h3>Argument <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a>: view<a class=\"heading-anchor\" href=\"#url-argument-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Kiedy Django znajdzie pasujące wyrażenie regularne, wywołuje podaną funkcję widoku z obiektem <a class=\"reference internal\" href=\"/pl/1.11/ref/request-response/#django.http.HttpRequest\" title=\"django.http.HttpRequest\"><code class=\"xref py py-class docutils literal notranslate\">HttpRequest</code></a> jako pierwszym argumentem i dowolnymi „złapanymi” wartościami z wyrażenia regularnego jako pozostałymi argumentami. Jeśli regex używa prostych złapań, wartości są przekazane jako argumenty pozycyjne; jeśli używa nazwanych złapań, wartości są przekazane jako argumenty nazwane. Za chwilę damy tego przykład.</p>\n</section>\n<section id=\"url-argument-kwargs\">\n<h3>Argument <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a>: kwargs<a class=\"heading-anchor\" href=\"#url-argument-kwargs\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Arbitralne argumenty słownikowe mogą być przekazane w słowniku do docelowego widoku. Nie będziemy używać tej funkcjonalności Django w tym tutorialu.</p>\n</section>\n<section id=\"url-argument-name\">\n<h3>Argument <a class=\"reference internal\" href=\"/pl/1.11/ref/urls/#django.conf.urls.url\" title=\"django.conf.urls.url\"><code class=\"xref py py-func docutils literal notranslate\">url()</code></a>: name<a class=\"heading-anchor\" href=\"#url-argument-name\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Nazwanie twojego URL-a pozwala odwołać się do niego jednoznacznie z każdego miejsca w Django, szczególnie z wnętrza szablonów. Ta potężna cecha pozwala ci na robienie globalnych zmian we wzorcach URL projektu przez zmianę w pojedynczym pliku.</p>\n<p>Jeśli czujesz się dobrze z przepływem żądań i odpowiedzi, przeczytaj <a class=\"reference internal\" href=\"/pl/1.11/intro/tutorial02/\"><span class=\"doc\">drugą część tego tutoriala</span></a>, aby zacząć pracę z bazą danych.</p>\n</section>\n</section>","rootId":"writing-your-first-django-app-part-1","toc":[{"title":"Tworzenie projektu","anchor":"creating-a-project","children":[]},{"title":"Serwer deweloperski","anchor":"the-development-server","children":[]},{"title":"Tworzenie aplikacji Ankiety","anchor":"creating-the-polls-app","children":[]},{"title":"Napisz swój pierwszy widok","anchor":"write-your-first-view","children":[{"title":"Argument url(): regex","anchor":"url-argument-regex","children":[]},{"title":"Argument url(): view","anchor":"url-argument-view","children":[]},{"title":"Argument url(): kwargs","anchor":"url-argument-kwargs","children":[]},{"title":"Argument url(): name","anchor":"url-argument-name","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"Pierwsze kroki","url":"/pl/1.11/intro/"}],"prev":{"docname":"intro/install","title":"Przewodnik szybkiej instalacji","url":"/pl/1.11/intro/install/"},"next":{"docname":"intro/tutorial02","title":"Pisanie pierwszej aplikacji Django, część 2.","url":"/pl/1.11/intro/tutorial02/"},"formats":{"html":"/pl/1.11/intro/tutorial01/","markdown":"/pl/1.11/intro/tutorial01.md","json":"/pl/1.11/intro/tutorial01.json"},"source":"https://github.com/django/django/blob/stable/1.11.x/docs/intro/tutorial01.txt","official":"https://docs.djangoproject.com/pl/1.11/intro/tutorial01/","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","fr","ja","id","pt-br","ko","es","el","pl"]}