diff --git a/pl/chromebook_setup/instructions.md b/pl/chromebook_setup/instructions.md index 92c2cdcb20b..70652c8520e 100644 --- a/pl/chromebook_setup/instructions.md +++ b/pl/chromebook_setup/instructions.md @@ -42,7 +42,7 @@ Następnie uruchom: cd djangogirls python3.6 -mvenv myvenv source myvenv/bin/activate - pip install django~=1.11.0 + pip install django~={{ book.django_version }} (zauważ, że w ostatniej linii użyliśmy tyldy, za którą następuje znak równości: ~=). diff --git a/pl/css/README.md b/pl/css/README.md index c837267e1bc..9ed51625bbc 100755 --- a/pl/css/README.md +++ b/pl/css/README.md @@ -133,7 +133,6 @@ Twój plik powinien teraz wyglądać tak: {% endfor %} - ``` Ok, teraz zapisz plik i odśwież stronę! diff --git a/pl/deploy/README.md b/pl/deploy/README.md index 9346ebdd919..13ba8fea23b 100755 --- a/pl/deploy/README.md +++ b/pl/deploy/README.md @@ -196,7 +196,7 @@ Możesz także przejść do zakładki "Pliki" i poruszać się za pomocą wbudow Twoja strona powinna teraz być dostępna w publicznym Internecie! Przejdź do zakładki "Sieć" PythonAnywhere, aby uzyskać link do niej. Możesz podzielić się nim z kimkolwiek chcesz :) -> **Uwaga:** Jest to poradnik dla początkujących, a podczas wdrażania tej witryny użyłyśmy kilka skrótów, które nie są idealnym rozwiązaniem z punktu widzenia bezpieczeństwa. Jeśli zdecydujesz się zbudować ten projekt lub rozpocząć nowy projekt, należy przejrzeć [Django deployment checklist](https://docs.djangoproject.com/en/1.11/howto/deployment/checklist/), aby uzyskać jakieś wskazówki dotyczące zabezpieczania witryny. +> **Uwaga:** Jest to poradnik dla początkujących, a podczas wdrażania tej witryny użyłyśmy kilka skrótów, które nie są idealnym rozwiązaniem z punktu widzenia bezpieczeństwa. Jeśli zdecydujesz się zbudować ten projekt lub rozpocząć nowy, powinnaś przejrzeć [Django deployment checklist](https://docs.djangoproject.com/en/2.0/howto/deployment/checklist/), aby uzyskać jakieś wskazówki dotyczące zabezpieczania witryny. ## Porady dotyczące debugowania diff --git a/pl/django_admin/README.md b/pl/django_admin/README.md index 04d635d2640..6899b9f7065 100755 --- a/pl/django_admin/README.md +++ b/pl/django_admin/README.md @@ -52,6 +52,6 @@ Upewnij się, że co najmniej dwa lub trzy posty (ale nie wszystkie) mają ustaw ![Admin Django](images/edit_post3.png) -Jeśli chcesz dowiedzieć się więcej o administratorze Django, powinnaś sprawdzić dokumentację Django: https://docs.djangoproject.com/en/1.11/ref/contrib/admin/ +Jeśli chcesz dowiedzieć się więcej o panelu admina Django, powinnaś sprawdzić dokumentację Django: https://docs.djangoproject.com/en/2.0/ref/contrib/admin/ Jest to prawdopodobnie dobry moment, aby wziąć kawę (lub herbatę) lub coś do jedzenia, aby ponownie naładować się energią. Stworzyłaś swój pierwszy model Django - zasługujesz na małą przerwę! \ No newline at end of file diff --git a/pl/django_forms/README.md b/pl/django_forms/README.md index 07661d792c5..be3aa05f1a2 100755 --- a/pl/django_forms/README.md +++ b/pl/django_forms/README.md @@ -94,7 +94,7 @@ Otwieramy plik `blog/urls.py` i dodajemy wiersz: {% filename %}blog/urls.py{% endfilename %} ```python -url(r'^post/new/$', views.post_new, name='post_new'), +path('post/new', views.post_new, name='post_new'), ``` Ostatecznie kod będzie wyglądał tak: @@ -102,13 +102,13 @@ Ostatecznie kod będzie wyglądał tak: {% filename %}blog/urls.py{% endfilename %} ```python -from django.conf.urls import url +from django.urls import path from . import views urlpatterns = [ - url(r'^$', views.post_list, name='post_list'), - url(r'^post/(?P\d+)/$', views.post_detail, name='post_detail'), - url(r'^post/new/$', views.post_new, name='post_new'), + path('', views.post_list, name='post_list'), + path('post//', views.post_detail, name='post_detail'), + path('post/new/', views.post_new, name='post_new'), ] ``` @@ -317,7 +317,7 @@ W pliku `blog/urls.py` dodajmy wiersz: {% filename %}blog/urls.py{% endfilename %} ```python - url(r'^post/(?P\d+)/edit/$', views.post_edit, name='post_edit'), + path('post//edit/', views.post_edit, name='post_edit'), ``` Wykorzystamy jeszcze raz szablon `blog/templates/blog/post_edit.html`, więc ostatnią rzeczą, której nam brakuje, jest *widok*. @@ -370,7 +370,7 @@ Zmodyfikuj jego tytuł lub treść wedle uznania, a następnie zapisz zmiany! Gratulacje! Twoja aplikacja staje się coraz bardziej kompletna! -Jeżeli potrzebujesz więcej informacji o formularzach Django, zajrzyj do dokumentacji: https://docs.djangoproject.com/en/1.11/topics/forms/ +Jeżeli potrzebujesz więcej informacji o formularzach Django, zajrzyj do dokumentacji: https://docs.djangoproject.com/en/2.0/topics/forms/ ## Bezpieczeństwo diff --git a/pl/django_installation/instructions.md b/pl/django_installation/instructions.md index 2cfd8821c87..d7734f70fd0 100755 --- a/pl/django_installation/instructions.md +++ b/pl/django_installation/instructions.md @@ -161,15 +161,32 @@ Zanim jednak to zrobimy, powinniśmy się upewnić, że mamy najnowszą wersję (myvenv) ~$ python3 -m pip install --upgrade pip -Następnie uruchom polecenie `pip install django~=1.11.0 `(zwróć uwagę, że używamy tyldy przed znakiem równości: `~=`) do instalacji Django. +### Instalacja pakietów z pliku wymagań + +Plik wymagań zawiera listę zależności, które zainstalujemy za pomocą polecenia `pip install`: + +Na początek stwórz plik `requirements.txt` wewnątrz katalogu `djangogirls/`: + + djangogirls + └───requirements.txt + + +W swoim pliku `djangogirls/requirements.txt` powinnaś dodać następujący tekst: + +{% filename %}djangogirls/requirements.txt{% endfilename %} + + Django=={{ book.django_version }} + + +Teraz możesz uruchomić `pip install -r requirements.txt`, aby zainstalować Django. {% filename %}command-line{% endfilename %} - (myvenv) ~$ pip install django~=1.11.0 - Collecting django~=1.11.0 - Downloading Django-1.11.3-py2.py3-none-any.whl (6.8MB) - Installing collected packages: django - Successfully installed django-1.11.3 + (myvenv) ~$ pip install -r requirements.txt + Collecting Django=={{ book.django_version }} (from -r requirements.txt (line 1)) + Downloading Django-{{ book.django_version }}-py3-none-any.whl (7.1MB) + Installing collected packages: Django + Successfully installed Django-{{ book.django_version }} > > {% filename %}command-line{% endfilename %} > -> C:\Users\Name\djangogirls> python -m pip install django~=1.11.0 +> C:\Users\Name\djangogirls> python -m pip install -r requirements.txt > diff --git a/pl/django_models/README.md b/pl/django_models/README.md index 033f70dc122..2a290594d0a 100755 --- a/pl/django_models/README.md +++ b/pl/django_models/README.md @@ -159,7 +159,7 @@ Teraz dodamy właściwości, o których wspomniałyśmy już wcześniej: `title` - `models.DateTimeField` - to jest data i godzina. - `models.ForeignKey` - to jest odnośnik do innego modelu. -Nie będziemy tutaj wyjaśniać drobiazgowo każdego elementu kodu, gdyż zajęłoby to zbyt dużo czasu. Zajrzyj do dokumentacji Django, jeżeli chcesz dowiedzieć się więcej o polach modelu oraz jak definiować rzeczy inne niż opisane powyżej (https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types). +Nie będziemy tutaj wyjaśniać drobiazgowo każdego elementu kodu, gdyż zajęłoby to zbyt dużo czasu. Zajrzyj do dokumentacji Django, jeżeli chcesz dowiedzieć się więcej o polach modelu oraz jak definiować rzeczy inne niż opisane powyżej (https://docs.djangoproject.com/en/2.0/ref/models/fields/#field-types). A co to takiego `def publish(self):`? To jest dokładnie metoda publikująca wpis (`publish`), o której wspominaliśmy wcześniej. Wyraz `def` oznacza, że mamy do czynienia z funkcją/metodą, a `publish` to nazwa metody. Możesz zmienić nazwę metody, jeśli chcesz. Zasadą jest, że używamy małych liter oraz znaków podkreślenia zamiast spacji. Na przykład metodę, która oblicza średnią cenę, można nazwać `calculate_average_price`. diff --git a/pl/django_start_project/README.md b/pl/django_start_project/README.md index 5e51ff20790..8df2e1e5aef 100755 --- a/pl/django_start_project/README.md +++ b/pl/django_start_project/README.md @@ -79,7 +79,7 @@ W pliku `settings.py` znajdź linijkę, w której jest napisane `TIME_ZONE` i zm TIME_ZONE = 'Europe/Warsaw' ``` -Kod języka składa się z języka, np. ` en ` dla języka angielskiego lub ` de ` dla języka niemieckiego i kodu kraju, np. ` de ` dla Niemiec lub ` ch ` dla Szwajcarii. Jeżeli angielski nie jest Twoim językiem ojczystym, możesz dodać tę wartość, aby domyślne przyciski i powiadomienia od Django były w Twoim języku. Tak więc przycisk "Anuluj" zostałby przetłumaczony na język, który tu zdefiniowałeś. [Django jest wyposażony w mnóstwo przygotowanych tłumaczeń](https://docs.djangoproject.com/en/1.11/ref/settings/#language-code). +Kod języka składa się z języka, np. ` en ` dla języka angielskiego lub ` de ` dla języka niemieckiego i kodu kraju, np. ` de ` dla Niemiec lub ` ch ` dla Szwajcarii. Jeżeli angielski nie jest Twoim językiem ojczystym, możesz dodać tę wartość, aby domyślne przyciski i powiadomienia od Django były w Twoim języku. Tak więc przycisk "Anuluj" zostałby przetłumaczony na język, który tu zdefiniowałeś. [Django jest wyposażone w mnóstwo przygotowanych tłumaczeń](https://docs.djangoproject.com/en/2.0/ref/settings/#language-code). Jeżeli chcesz używać innego języka, zmień jego kod, modyfikując następujący wiersz: @@ -191,7 +191,7 @@ Jeśli używasz Chromebooka, zawsze odwiedzasz serwer testowy, uzyskując dostę Gratulacje! Właśnie stworzyłaś swoją pierwszą stronę i uruchomiłaś ją za pomocą serwera! Prawda, że wspaniale? -![Działa!](images/it_worked2.png) +![Install worked!](images/install_worked.png) Kiedy serwer internetowy jest uruchomiony, nie możesz zobaczyć nowego wiersza polecenia do wprowadzania dodatkowych poleceń. Terminal przyjmie nowy tekst, ale nie wykona nowego polecenia. Dzieje się tak dlatego, że serwer internetowy ciągle działa, aby nasłuchiwać przychodzących żądań. diff --git a/pl/django_start_project/images/install_worked.png b/pl/django_start_project/images/install_worked.png new file mode 100644 index 00000000000..1ea099b210c Binary files /dev/null and b/pl/django_start_project/images/install_worked.png differ diff --git a/pl/django_start_project/images/it_worked2.png b/pl/django_start_project/images/it_worked2.png deleted file mode 100644 index 4412ecfc49e..00000000000 Binary files a/pl/django_start_project/images/it_worked2.png and /dev/null differ diff --git a/pl/django_urls/README.md b/pl/django_urls/README.md index 544031dfd8a..82b07ea0701 100755 --- a/pl/django_urls/README.md +++ b/pl/django_urls/README.md @@ -21,11 +21,11 @@ Otwórzmy plik `mysite/urls.py` i przyjrzyjmy się jego treści: [...] """ -from django.conf.urls import url +from django.urls import path, include from django.contrib import admin urlpatterns = [ - url(r'^admin/', admin.site.urls), + path('admin/', admin.site.urls), ] ``` @@ -38,34 +38,11 @@ Adres URL panelu administracyjnego, który odwiedzałaś w poprzednim rozdziale, {% filename %}mysite/urls.py{% endfilename %} ```python - url(r'^admin/', admin.site.urls), + path('admin/', admin.site.urls), ``` To znaczy, że dla każdego adresu zaczynającego się od `admin/` Django spróbuje dopasować odpowiedni *widok*. W tym przypadku używamy wielu adresów URL panelu administracyjnego, dlatego nie wypisujemy ich wszystkich w tym jednym małym pliku - tak jest czytelniej i bardziej estetycznie. -## Regex, czyli wyrażenia regularne - -Zastanawiałaś się, w jaki sposób Django kojarzy adresy URL z widokami? Cóż, ta część jest nieco bardziej złożona. Django wykorzystuje `regex`, czyli tzw. wyrażenia regularne. Regex posiada mnóstwo (naprawdę mnóstwo!) reguł, które tworzą wzorzec do wyszukania. To dość skomplikowany temat i nie będziemy tutaj wchodzić w szczegóły. - -Jeśli nadal chcesz zrozumieć, w jaki sposób stworzyliśmy wzorce, oto przykład tego procesu - będziemy potrzebować tylko ograniczonego podzbioru reguł, aby wyrazić wzorzec, którego szukamy, a mianowicie: - -* `^` oznacza początek tekstu -* `$` oznacza koniec tekstu -* `\d` oznacza cyfrę -* `+` oznacza, że poprzedni element powinien się powtórzyć przynajmniej raz -* piszemy () aby uchwycić część wzorca - -Inne znaki we wzorcu URL będą rozumiane dosłownie. - -Teraz wyobraź sobie, że masz stronę z takim adresem `http://www.mysite.com/post/12345/`, gdzie `12345` to numer Twojego posta. - -Pisanie osobnych widoków dla każdego numeru z osobna byłoby frustrujące. Z wyrażeniami regularnymi możemy stworzyć wzorzec, który dopasuje URL i znajdzie dla nas numer posta: `^post/(\d+)/$`. Rozbijmy go na mniejsze części, by zrozumieć, co tu się dzieje: - -* **^post/** mówi Django, by skupiło się na każdym adresie URL, który zaczyna się od wyrazu `post` (zaraz po `^`) -* **(\d+)** oznacza, że szukamy numeru (jedna lub więcej cyfr) i że chcemy go wyodrębnić -* **/** mówi Django, że następny w kolejności powinien się pojawić znak `/` -* **$** informuje, że to jest koniec adresu URL, co oznacza, że Django będzie szukał adresów kończących się na `/` - ## Twój pierwszy adres URL w Django! Czas utworzyć nasz pierwszy adres URL! Chcemy, aby adres 'http://127.0.0.1:8000/' był stroną główną naszego bloga i wyświetlał listę wpisów. @@ -79,20 +56,17 @@ Twój plik `mysite/urls.py` powinien teraz wyglądać tak: {% filename %}mysite/urls.py{% endfilename %} ```python -from django.conf.urls import include -from django.conf.urls import url +from django.urls import path, include from django.contrib import admin urlpatterns = [ - url(r'^admin/', admin.site.urls), - url(r'', include('blog.urls')), + path('admin/', admin.site.urls), + path('', include('blog.urls')), ] ``` Django przekieruje wszystkie reguły z adresu 'http://127.0.0.1:8000/' do `blog.urls` i tam będzie szukał dalszych wskazówek. -Pisząc wyrażenia regularne w Pythonie, zawsze dajemy `r` na początku ciągu znaków. To jest podpowiedź dla Pythona, że w tym ciągu znaków mogą się znajdować znaki specjalne, które nie są przeznaczone dla niego, ponieważ oznaczają wyrażenie regularne. - ## blog.urls Stwórz nowy pusty plik o nazwie `urls.py` w katalogu `blog`. Dokładnie tak! Dodaj te pierwsze dwie linie: @@ -100,7 +74,7 @@ Stwórz nowy pusty plik o nazwie `urls.py` w katalogu `blog`. Dokładnie tak! Do {% filename %}blog/urls.py{% endfilename %} ```python -from django.conf.urls import url +from django.urls import path from . import views ``` @@ -112,18 +86,18 @@ Potem możemy dodać nasz pierwszy wzorzec adresu URL: ```python urlpatterns = [ - url(r'^$', views.post_list, name='post_list'), + path('', views.post_list, name='post_list'), ] ``` -Jak widzisz, teraz przyporządkowujemy widok (`view`) o nazwie `post_list` do URL `^$`. To wyrażenie regularne będzie dopasowywać `^` (początek) po którym następuje `$` (koniec) - więc tylko pusty ciąg znaków będzie zgodny. I to się zgadza, ponieważ dla mechanizmów rozróżniających adresy w Django, 'http://127.0.0.1:8000/' nie jest częścią adresu URL. Ten wzorzec będzie wskazówką dla Django, że `views.post_list` jest właściwym miejscem dla każdego, kto wejdzie na stronę poprzez adres 'http://127.0.0.1:8000/'. +Jak widzisz, teraz przyporządkowujemy widok (`view`) o nazwie `post_list` do strony głównej. Ten wzorzec URL zostanie dopasowany do pustego ciągu znaków, a Django zignoruje nazwę domeny (np. http://127.0.0.1:8000/), która poprzedza pełną ścieżkę URL. Ten wzorzec będzie wskazówką dla Django, że `views.post_list` jest właściwym miejscem dla każdego, kto wejdzie na stronę poprzez adres 'http://127.0.0.1:8000/'. Ostatnia część, `name='post_list` jest nazwą URL, która będzie używana do zidentyfikowania widoku. Nazwa może być taka sama jak nazwa widoku albo kompletnie inna. W projekcie będziemy później używać nazw URL, więc ważne jest nazwanie każdego URL-a w aplikacji. Powinnyśmy również starać się używać nazw URL unikalnych i prostych do zapamiętania. -Jeśli teraz spróbujesz odwiedzić stronę http://127.0.0.1:8000/, zobaczysz komunikat "niedostępna strona internetowa". Wynika to z faktu, że serwer (pamiętaj o wpisaniu ` runserver`?) nie jest już uruchomiony. Spójrz na okno konsoli serwera, aby dowiedzieć się, dlaczego. +Jeśli teraz spróbujesz odwiedzić stronę http://127.0.0.1:8000/, zobaczysz komunikat "niedostępna strona internetowa". Wynika to z faktu, że serwer (pamiętałaś o wpisaniu ` runserver`?) nie jest już uruchomiony. Spójrz na okno konsoli serwera, aby dowiedzieć się, dlaczego. ![Błąd](images/error1.png) -Twoja konsola pokazuje błąd, ale nie martw się - w rzeczywistości jest to całkiem użyteczne: mówi ci, że** brak atrybutu 'post_list'**. To jest nazwa widoku (*view*), którą Django próbuje znaleźć i użyć, ale jeszcze go nie utworzyłyśmy. Na tym etapie Twój `/admin/ ` również nie będzie działać. Nie martw się, zajmiemy się tym. +Twoja konsola pokazuje błąd, ale nie martw się - w rzeczywistości jest to całkiem użyteczne: mówi Ci, że** brak atrybutu 'post_list'**. To jest nazwa widoku (*view*), którą Django próbuje znaleźć i użyć, ale jeszcze go nie utworzyłyśmy. Na tym etapie Twój `/admin/ ` również nie będzie działać. Nie martw się, zajmiemy się tym. -> Jeśli chciałabyś dowiedzieć się więcej na temat konfiguracji URL w Django, zajrzyj do oficjalnej dokumentacji: https://docs.djangoproject.com/en/1.11/topics/http/urls/ \ No newline at end of file +> Jeśli chciałabyś dowiedzieć się więcej na temat konfiguracji URL w Django, zajrzyj do oficjalnej dokumentacji: https://docs.djangoproject.com/en/2.0/topics/http/urls/ \ No newline at end of file diff --git a/pl/django_views/README.md b/pl/django_views/README.md index 9f61a1d523b..8b9c166943f 100755 --- a/pl/django_views/README.md +++ b/pl/django_views/README.md @@ -41,4 +41,4 @@ Znowu błąd! Przeczytaj, o co chodzi tym razem: Przynajmniej pokazuje, że serwer jest uruchomiony ponownie, ale nadal nie wygląda dobrze, prawda? Nie martw się, to po prostu błąd strony, nic strasznego! Podobnie jak komunikaty o błędach w konsoli, są one całkiem przydatne. Możesz przeczytać, że *TemplateDoesNotExist*. Naprawmy ten błąd i stwórzmy szablon - ale to już w następnym rozdziale! -> Więcej na temat widoków Django dowiesz się czytając oficjalną dokumentację: https://docs.djangoproject.com/en/1.11/topics/http/views/ \ No newline at end of file +> Więcej na temat widoków Django dowiesz się czytając oficjalną dokumentację: https://docs.djangoproject.com/en/2.0/topics/http/views/ \ No newline at end of file diff --git a/pl/dynamic_data_in_templates/README.md b/pl/dynamic_data_in_templates/README.md index bb9bb431953..3258250e5d5 100755 --- a/pl/dynamic_data_in_templates/README.md +++ b/pl/dynamic_data_in_templates/README.md @@ -78,4 +78,4 @@ def post_list(request): I to wszystko! Czas, żebyśmy wróciły do naszego szablonu i wyświetliły ten QuerySet! -Chcesz przeczytać trochę więcej o QuerySets w Django? Powinnaś zajrzeć tutaj: https://docs.djangoproject.com/en/1.11/ref/models/querysets/ \ No newline at end of file +Jeżeli chciałabyś poczytać trochę więcej na temat QuerySetów w Django, powinnaś rzucić okiem tutaj: https://docs.djangoproject.com/en/2.0/ref/models/querysets/ \ No newline at end of file diff --git a/pl/extend_your_application/README.md b/pl/extend_your_application/README.md index 445cd35b1c9..c2fa302dc27 100755 --- a/pl/extend_your_application/README.md +++ b/pl/extend_your_application/README.md @@ -54,7 +54,7 @@ Dodajmy adres URL w pliku `urls.py` dla naszego *widoku (ang.view)* `post_detail Chcemy, aby nasz wpis i wszystkie informacje o nim, były widoczne pod tym adresem **URL**: http://127.0.0.1:8000/post/1/ -W pliku `blog/urls.py` stwórzmy adres URL wskazujący na *widok* o nazwie `post_detail`, który wyświetli nam cały wpis. Dodaj wiersz `url(r'^post/(?P\d+)/$', views.post_detail, name='post_detail'),` w pliku `blog/urls.py`. Jego zawartość powinna wyglądać tak: +W pliku `blog/urls.py` stwórzmy adres URL wskazujący na *widok* o nazwie `post_detail`, który wyświetli nam cały wpis. Dodaj wiersz `path('post/)/', views.post_detail, name='post_detail'),` w pliku `blog/urls.py`. Jego zawartość powinna wyglądać tak: {% filename %}{{ warning_icon }} blog/urls.py{% endfilename %} @@ -63,18 +63,16 @@ from django.conf.urls import url from . import views urlpatterns = [ - url(r'^$', views.post_list, name='post_list'), - url(r'^post/(?P\d+)/$', views.post_detail, name='post_detail'), + path('', views.post_list, name='post_list'), + path('post//', views.post_detail, name='post_detail'), ] ``` -Ta część `^post/(?P\d+)/$` wygląda strasznie, ale bez obaw – wyjaśnimy ją dla Ciebie: +Część `post//` określa wzorzec URL - wytłumaczymy Tobie, co to jest: -- zaczyna się od `^` jeszcze raz - "początek". -- `post/` po prostu oznacza, że po rozpoczęciu, adres URL powinien zawierać słowo **post** i **/**. Jak na razie dobrze idzie. -- `(?P\d+)` - ta część jest trudniejsza. Oznacza ona, że Django pobierze wszystko, co umieścisz w tym miejscu i przekaże to do widoku w zmiennej o nazwie `pk`. (Zauważ, że odpowiada to nazwie, jaką nadaliśmy zmiennej zawierającej klucz podstawowy powyżej w `blog/templates/blog/post_list.html`!) `\d` i informuje nas, że klucz ten może zawierać tylko cyfry, nie litery (czyli wszystko pomiędzy 0 a 9). `+` oznacza, że to musi być jedna lub więcej cyfr. Czyli coś takiego: `http://127.0.0.1:8000/post//` nie jest poprawne, ale już `http://127.0.0.1:8000/post/1234567890/` jest jak najbardziej w porządku! -- `/` – potrzebujemy ponownie **/**. -- `$` – "koniec"! +- `post/` po prostu oznacza, że adres URL powinien zaczynać się od słowa **post**, po którym nastąpi **/**. Jak na razie idzie dobrze. +- `` - ta część jest trudniejsza. Oznacza ona, że Django spodziewa się liczby całkowitej i przekaże jej wartość do widoku jako zmienną `pk`. +- `/` - i znów potrzebujemy **/**, zanim zakończymy wzorzec URL. To oznacza, że gdy wpiszesz w przeglądarce adres `http://127.0.0.1:8000/post/5/`, Django zrozumie, że potrzebujesz *widoku* zwanego `post_detail` i przekaże informację, że `pk` jest równe `5` temu *widokowi*. diff --git a/pl/html/README.md b/pl/html/README.md index 152219cd784..450dcf0ed86 100755 --- a/pl/html/README.md +++ b/pl/html/README.md @@ -41,8 +41,10 @@ Dodaj następującą treść w pliku z szablonem: ```html +

Hi there!

It works!

+ ``` diff --git a/pl/whats_next/README.md b/pl/whats_next/README.md index 9c2192f68d2..363b632ac93 100755 --- a/pl/whats_next/README.md +++ b/pl/whats_next/README.md @@ -14,7 +14,7 @@ Tak! Najpierw wypróbuj naszą inną książkę o nazwie [Django Girls Tutorial: Później możesz spróbować zasobów wyszczególnionych poniżej. Są one bardzo polecane! -- [Oficjalny tutorial Django](https://docs.djangoproject.com/en/1.11/intro/tutorial01/) +- [Oficjalny tutorial Django](https://docs.djangoproject.com/en/2.0/intro/tutorial01/) - [Tutoriale New Coder](http://newcoder.io/tutorials/) - [Kurs Pythona na Code Academy](https://www.codecademy.com/en/tracks/python) - [Kurs HTML i kurs CSS na Codecademy](https://www.codecademy.com/tracks/web)