diff --git a/sk/GLOSSARY.md b/sk/GLOSSARY.md old mode 100755 new mode 100644 index 38a876ffe64..a45f5aea436 --- a/sk/GLOSSARY.md +++ b/sk/GLOSSARY.md @@ -1,3 +1,3 @@ # editor kódu -Editor kódu je aplikácia, pomocou ktorej môžeš svoj kód uložiť, takže sa k nemu môžeš neskôr vrátiť. Kde ho môžeš zohnať, zistíš v [kapitole o editore kódu](./code_editor/README.md) \ No newline at end of file +Editor kódu je aplikácia, pomocou ktorej môžeš svoj kód uložiť, aby si sa k nemu mohla neskôr vrátiť. Kde ho môžeš zohnať, zistíš v [kapitole o editore kódu](./code_editor/README.md) \ No newline at end of file diff --git a/sk/README.md b/sk/README.md old mode 100755 new mode 100644 index a2173c80527..18d32e6d7b0 --- a/sk/README.md +++ b/sk/README.md @@ -1,51 +1,51 @@ -# Django Girls Tutoriál +# Django Girls tutoriál [![Gitter](https://badges.gitter.im/DjangoGirls/tutorial.svg)](https://gitter.im/DjangoGirls/tutorial) -> Toto dielo je zverejnené pod medzinárodnou licenciou Creative Commons Attribution-ShareAlike ("uvedenie autora – rovnaké šírenie") 4.0. Ak chcete zobraziť kópiu tejto licencie, navštívte https://creativecommons.org/licenses/by-sa/4.0/ +> Toto dielo je zverejnené pod licenciou Creative Commons Attribution-ShareAlike 4.0 International License. Ak chceš vidieť kópiu tejto licencie, navštív https://creativecommons.org/licenses/by-sa/4.0/ ## Vitaj -Vitaj na Django Girls! Sme radi, že ťa tu vidíme :) V tomto tutoriále ti ukážeme čo je pod kapotou webových technológií. Ponúkneme ti pohľad na všetky čiastky a kúsky, ktoré musia do seba zapadnúť aby web fungoval tak ako ho poznáme. +Vitaj v Django Girls tutoriáli! Tešíme sa, že tu si. :) V tomto tutoriáli sa vydáme na cestu pod kapotu webových technológií a ponúkneme ti letmý pohľad na všetky čiastočky a kúsky, ktoré musia do seba zapadnúť, aby vytvorili web tak, ako ho poznáme. -Ako so všetkými vecami, ktoré sú neznáme, aj toto bude dobrodružstvo - ale neboj sa, keďže si sa už odvážila byť tu, všetko bude v poriadku :) +Ako to býva so všetkým, čo je neznáme, aj toto bude dobrodružstvo - ale žiadny strach, keď si už nabrala odvahu byť tu, zvládneš to v pohode. :) ## Úvod -Mala si niekedy pocit, že svet je stále viac a viac o technológiách a ku ktorým (zatiaľ) nemáš vzťah? Uvažovala si niekedy, že by si si vytvorila webovú stránku, ale nikdy si nemala dostatok motivácie začať? Zdalo sa ti niekedy, že svet softvéru je pre teba príliš komplikovaný a že sama nezvládneš nič vytvoriť? +Mala si niekedy pocit, že svet je stále viac a viac o technológiách, ku ktorým (zatiaľ) nemáš vzťah? Uvažovala si niekedy, že by si si vytvorila webovú stránku, ale nikdy si nemala dostatok motivácie začať? Zdalo sa ti niekedy, že svet softvéru je pre teba príliš komplikovaný na to, aby si sa vôbec pokúsila niečo sama vytvoriť? -Máme pre teba dobrú správu! Programovanie nie je také zložité, ako sa zdá a chceme ti ukázať, aké môže byť zábavné. +Máme pre teba dobrú správu! Programovanie nie je také zložité, ako sa zdá, a my ti chceme ukázať, aké môže byť zábavné. -Tento návod z teba neurobí programátorku mávnutím čarovného prútika. Ak chceš byť v tom dobrá, čakajú ťa mesiace či dokonca roky štúdia a praxe. Chceme ti ale ukázať, že vytvorenie webovej stránky nie je také ťažké, ako sa zdá. Pokúsime sa ti vysvetliť rôzne technológie tak, aby si sa ich nemusela báť. +Tento návod z teba neurobí programátorku mávnutím čarovného prútika. Ak v tom chceš byť dobrá, čakajú ťa mesiace či dokonca roky štúdia a praxe. Chceme ti ale ukázať, že programovanie a vytváranie webových stránok nie je také ťažké, ako sa zdá. Pokúsime sa ti vysvetliť rôzne technológie tak, aby si sa ich nemusela báť. -Dúfame, že sa ti tieto veci zapáčia tak veľmi ako nám! +Dúfame, že sa ti technológia zapáči tak veľmi ako nám! -## Čo ťa tento návod naučí? +## Čo ťa tento tutoriál naučí? -Po skončení budeš mať funkčnú webovú aplikáciu: tvoj vlastný blog. Ukážeme ti, ako ho zverejniť na webe, kde ho môže každý navštíviť! +Po skončení budeš mať funkčnú webovú aplikáciu - tvoj vlastný blog. Ukážeme ti, ako ho zverejniť na webe, kde ho môže každý navštíviť! Výsledok bude vyzerať asi takto: ![Obrázok 0.1](images/application.png) -> Ak budeš na tomto projekte pracovať sama a nemáš mentora, ktorý ti pomáha, môžeš v prípade problémov navštíviť tento chat: [![Gitter](https://badges.gitter.im/DjangoGirls/tutorial.svg)](https://gitter.im/DjangoGirls/tutorial). Požiadali sme našich mentorov, ale aj absolventky, aby sa na tomto chate občas ukázali a pomohli ostatným! Neboj sa opýtať čomu nerozumieš! +> Ak budeš na tomto projekte pracovať sama a nemáš mentorku či mentora, ktorý ti pomáha, môžeš v prípade problémov navštíviť tento chat: [![Gitter](https://badges.gitter.im/DjangoGirls/tutorial.svg)](https://gitter.im/DjangoGirls/tutorial). Požiadali sme naše mentorky a mentorov, ale aj absolventky, aby sa na tomto chate občas ukázali a pomohli ostatným! Neboj sa opýtať, čomu nerozumieš! OK, [začnime pekne po poriadku...](./how_the_internet_works/README.md) -## Sledovanie tutoriálu doma +## Nasledovanie tutoriálu doma -Je úžasné, zúčastniť sa Django Girls workshopu, ale uvedomujeme si, že nie vždy je možné byť na niektorom. Preto ti odporúčami aby si skúsila postupovať podľa tohto tutoriálu doma. Pre tých ktorí sú doma, v súčasnosti pripravujeme videá, ktoré umožnia jednoduchšie sledovanie tutoriálu doma. Stále sa na tom pracuje, ale viac a viac vecí bude čoskoro na [Coding is for girls](https://www.youtube.com/channel/UC0hNd2uW8jTR5K3KBzRuG2A/feed) YouTube kanály. +Zúčastniť sa Django Girls workshopu je skvelé, ale uvedomujeme si, že nie vždy je možné niektorý navštíviť. Preto ťa chceme povzbudiť v tom, aby si skúsila postupovať podľa tohto tutoriálu doma. Pre čitateľky doma v súčasnosti pripravujeme videá, vďaka ktorým bude jednoduchšie tutoriál nasledovať sama. Stále sa na tom pracuje, ale viac a viac vecí bude čoskoro na kanáli na YouTube pod názvom [Coding is for girls](https://www.youtube.com/channel/UC0hNd2uW8jTR5K3KBzRuG2A/feed). -V každej kapitole ktorá už bola spracovaná sa nachádza odkaz na príslušné video. +V každej kapitole, ktorá už bola spracovaná, sa nachádza odkaz na príslušné video. -## Informácie a možnosti ako sa zapojiť +## Informácie a možnosti, ako sa zapojiť -Tento návod vytvorili a udržiavajú [DjangoGirls](https://djangogirls.org/). Ak nájdeš chyby alebo by si chcela aktualizovať tento návod, prosím [postupuj podľa pokynov](https://github.com/DjangoGirls/tutorial/blob/master/README.md). +Tento návod vytvorili a udržiavajú [DjangoGirls](https://djangogirls.org/). Ak nájdeš chyby alebo by si chcela tento tutoriál aktualizovať, prosím, [postupuj podľa pokynov](https://github.com/DjangoGirls/tutorial/blob/master/README.md). -## Chceš pomôcť s prekladom do iných jayzkov? +## Chceš pomôcť s prekladom do iných jazykov? V súčasnosti koordinujeme preklady cez platformu crowdin.com: https://crowdin.com/project/django-girls-tutorial -Ak tvoj jazyk nie je v zozname na [crowdin. com](https://crowdin.com/), [daj nám prosím vedieť](https://github.com/DjangoGirls/tutorial/issues/new) aký jazyk máme pridať. \ No newline at end of file +Ak sa tvoj jazyk nenachádza v zozname na [crowdin](https://crowdin.com/), [daj nám, prosím, vedieť](https://github.com/DjangoGirls/tutorial/issues/new), aký jazyk máme pridať. \ No newline at end of file diff --git a/sk/SUMMARY.md b/sk/SUMMARY.md old mode 100755 new mode 100644 index cc6f58b1b5b..29aedb95212 --- a/sk/SUMMARY.md +++ b/sk/SUMMARY.md @@ -1,27 +1,35 @@ # Zhrnutie * [Úvod](README.md) -* [Inštalácia](installation/README.md) +* [Inštalácia](installation/README.md) + * [Príkazový riadok](installation/README.md#command-line) + * [Python](installation/README.md#python) + * [Editor kódu](installation/README.md#code-editor) + * [Virtuálne prostredie](installation/README.md#virtualenv) + * [Django](installation/README.md#django) + * [Git](installation/README.md#git) + * [GitHub](installation/README.md#github-account) + * [PythonAnywhere](installation/README.md#pythonanywhere-account) * [Inštalácia (chromebook)](chromebook_setup/README.md) -* [Ako funguje Internet](how_the_internet_works/README.md) +* [Ako funguje internet](how_the_internet_works/README.md) * [Úvod do príkazového riadku](intro_to_command_line/README.md) * [Inštalácia Pythonu](python_installation/README.md) * [Editor kódu](code_editor/README.md) * [Úvod do jazyka Python](python_introduction/README.md) * [Čo je Django?](django/README.md) -* [Inštalácia Django](django_installation/README.md) +* [Inštalácia Djanga](django_installation/README.md) * [Tvoj prvý Django projekt!](django_start_project/README.md) * [Django modely](django_models/README.md) * [Django admin](django_admin/README.md) * [Nasadenie!](deploy/README.md) -* [Django url](django_urls/README.md) -* [Django views - čas tvoriť!](django_views/README.md) +* [Django URL](django_urls/README.md) +* [Django viewy - čas tvoriť!](django_views/README.md) * [Úvod do HTML](html/README.md) -* [Django ORM (tvorba dotazov)](django_orm/README.md) +* [Django ORM (QuerySety)](django_orm/README.md) * [Dynamické dáta v šablónach](dynamic_data_in_templates/README.md) -* [Šablóny Django](django_templates/README.md) -* [CSS - skrášli to](css/README.md) +* [Django šablóny](django_templates/README.md) +* [CSS - skrášlime to](css/README.md) * [Rozširovanie šablón](template_extending/README.md) * [Ako rozšíriť aplikáciu](extend_your_application/README.md) -* [Formuláre Django](django_forms/README.md) +* [Django formuláre](django_forms/README.md) * [Čo ďalej?](whats_next/README.md) \ No newline at end of file diff --git a/sk/chromebook_setup/README.md b/sk/chromebook_setup/README.md index bdda98ad71d..a218b11f42b 100644 --- a/sk/chromebook_setup/README.md +++ b/sk/chromebook_setup/README.md @@ -1,5 +1,5 @@ # Nastavenie Chromebooku -> **Poznámka:** Ak už máš po inštalácii, môžeš ísť rovno na [Úvod do Python-u](../python_introduction/README.md). +> **Poznámka** Ak už máš po [inštalácii](../installation/README.md), nemusíš toto robiť znova. Môžeš ísť rovno na [Úvod do Pythonu](../python_introduction/README.md). {% include "/chromebook_setup/instructions.md" %} \ No newline at end of file diff --git a/sk/chromebook_setup/instructions.md b/sk/chromebook_setup/instructions.md index 6f0c9821a95..0c90341e715 100644 --- a/sk/chromebook_setup/instructions.md +++ b/sk/chromebook_setup/instructions.md @@ -1,51 +1,149 @@ -Túto časť [môžeš preskočiť](http://tutorial.djangogirls.org/en/installation/#install-python) ak nepoužívaš Chromebook. Ak ho používaš, tak tvoja inštalácia bude trochu iná. Môžeš odignorovať zvyšok inštalačného postupu. +Túto časť [môžeš preskočiť](http://tutorial.djangogirls.org/en/installation/#install-python), ak nepoužívaš Chromebook. Ak ho používaš, tak tvoja inštalácia bude trochu iná. Zvyšok inštalačných pokynov môžeš ignorovať. -### Cloud 9 +### Cloud IDE (PaizaCloud Cloud IDE, AWS Cloud9, Glitch.com) -Cloud 9 je nástroj ktorý ti poskytne editor kódu a prístup na počítač, ktorý beží v cloude na internete, kde možeš inštalovať, písať a spúšťať softvér. Počas tohto tutoriálu Cloud 9 sa bude tváriť ako tvoj *lokálny stroj*. Príkazy budeš zadávať do terminálového rozhrania, tak ako tvoje spolužiačky čo používajú OS X, Ubuntu, alebo Windows, ale tvoj temrinál bude pripojený na počítač, ktorý beží niekde inde a ktorý Cloud 9 pripraví pre teba. +Cloud IDE je nástroj, ktorý ti poskytne editor kódu a prístup na počítač, ktorý beží v cloude na internete, kde môžeš inštalovať, písať a spúšťať softvér. Počas tohto tutoriálu sa Cloud IDE bude tváriť ako tvoj *lokálny stroj*. Príkazy budeš zadávať do terminálového rozhrania tak, ako tvoje spoluúčastníčky, čo používajú OS X, Ubuntu, alebo Windows, ale tvoj terminál bude pripojený na počítač, ktorý beží niekde inde a ktorý Cloud IDE pripraví pre teba. Tu sú inštrukcie pre cloud IDE (PaizaCloud Cloud IDE, AWS Cloud9, Glitch.com). Môžeš si vybrať jedno z Cloud IDE riešení a postupovať podľa inštrukcií pre zvolený typ IDE. -1. Nainštaluj si Cloud 9 z [Chrome web store](https://chrome.google.com/webstore/detail/cloud9/nbdmccoknlfggadpfkmcpnamfnbkmkcp) -2. Choď na [c9.io](https://c9.io) -3. Založ si účet -4. Klikni na *Create a New Workspace* -5. Pomenuj ho *django-girls* -6. Zvoľ *Blank* (druhý sprava v dolnom riadku čo má oranžové logo) +#### PaizaCloud Cloud IDE -Teraz by si mala vidieť rozhranie s bočnou lištou, veľké hlavné okno s trochu textu a malé okno v dolnej časti, ktoré vyzerá takto nejak: +1. Choď na [PaizaCloud Cloud IDE](https://paiza.cloud/) +2. Vytvor si účet +3. Klikni na *New Server* a vyber si Django appku +4. Klikni na tlačítko Terminal (na ľavej strane okna) -{% filename %}Cloud 9{% endfilename %} +Teraz by si mala vidieť rozhranie s bočnou lištou a tlačidlami naľavo. Klikni na tlačítko Terminal, aby sa ti otvorilo terminálové okno s takýmto promptom: + +{% filename %}Terminal{% endfilename %} - yourusername:~/workspace $ + $ -Táto dolná časť je tvoj *terminál*, do ktorého budeš zadávať príkazy pre počítač, ktorý pre teba pripravil Cloud 9. Veľkosť okna môžeš meniť a keď potrebuješ tak si ho môžeš zväčšiť. +Terminál na PaizaCloud Cloud IDE je pripravený na tvoje inštrukcie. Oknu môžeš zmeniť veľkosť alebo ho maximalizovať, aby bolo trochu väčšie. -### Virtuálne prostredie +#### AWS Cloud9 -Virtuálne prostredie (tiež nazývané virtualenv) je ako súkromná krabica, do ktorej môžeme uložiť užitočný počítačový kód patriaci projektu na ktorom pracujeme. Používame ho na oddelenie rôznych častí kódu pre rôzne projekty, aby sa nám medzi nimi nepomiešali veci. +Cloud 9 momentálne vyžaduje, aby si si vytvorila AWS účet a vložila informácie o kreditnej karte. -V termináli, v spodnej časti Cloud 9 rozhrania, spusti nasledovné: +1. Nainštaluj si Cloud 9 z [Chrome webového obchodu](https://chrome.google.com/webstore/detail/cloud9/nbdmccoknlfggadpfkmcpnamfnbkmkcp) +2. Choď na [c9.io](https://c9.io) a klikni na *Get started with AWS Cloud9* +3. Vytvor si AWS účet (je potrebné zadať údaje o svojej kreditnej karte, ale účet môžeš používať zdarma). +4. Na AWS Dashboarde napíš do vyhľadávania *Cloud9* a klikni naň +5. Na Cloud 9 dashboarde klikni na *Create environment* +6. Nazvi ho *django-girls* +7. Pri konfigurácii nastavení vyber *Create a new instance for environment (EC2)* ako "Environment Type" a *t2.micro* ako "Instance type" (malo by tam byť napísané "Free-tier eligible."). Prednastavené cost-saving nastavenie je okej, aj ostatné prednastavené hodnoty môžeš nechať tak. +8. Klikni na *Next step* +9. Klikni na *Create environment* -{% filename %}Cloud 9{% endfilename %} +Teraz by si mala vidieť rozhranie s bočnou lištou, veľkým hlavným oknom s trochou textu a malým oknom v dolnej časti, ktoré vyzerá takto nejak: + +{% filename %}bash{% endfilename %} + + tvojaprezyvka:~/workspace $ + + +Táto dolná časť je tvoj terminál. Môžeš ho použiť na poslanie inštrukcií vzdialenému Cloud 9 počítaču. Okno môžeš zväčšiť. + +#### Glitch.com Cloud IDE + +1. Choď na [Glitch.com](https://glitch.com/) +2. Vytvor si účet (https://glitch.com/signup) alebo použi svoj účet na GitHube, ak máš. (Pozri inštrukcie ku GitHubu nižšie.) +3. Klikni na *New Project* a vyber *hello-webpage* +4. Klikni na rozbaľovacie menu Tools (vľavo dole v okne) a potom na tlačítko Terminal, aby sa ti otvorila terminálová záložka s takýmto promptom: + +{% filename %}Terminal{% endfilename %} + + app@nazov-tvojho-glitch-projektu:~ + + +Ak používaš Glitch.com ako tvoje cloud IDE, nemusíš si vytvárať virtuálne prostredie. Namiesto toho vytvor nasledujúce súbory ručne: - sudo apt update - sudo apt install python3.6-venv +{% filename %}glitch.json{% endfilename %} + +```json +{ + "install": "pip3 install -r requirements.txt --user", + "start": "bash start.sh", + "watch": { + "throttle": 1000 + } +} +``` + +{% filename %}requirements.txt{% endfilename %} + + Django~={{ book.django_version }} + + +{% filename %}.bash_profile{% endfilename %} + +```bash +alias python=python3 +alias pip=pip3 +``` + +{% filename %}start.sh{% endfilename %} + +```bash +chmod 600 .bash_profile +pip3 install -r requirements.txt --user +python3 manage.py makemigrations +python3 manage.py migrate +python3 manage.py runserver $PORT +``` + +Keď budeš mať tieto súbory vytvorené, choď do Terminálu a vykonaj nasledujúce príkazy, aby si si vytvorila svoj prvý Django projekt: + +{% filename %}Terminal{% endfilename %} + + django-admin.py startproject mysite . + refresh -Ak to ešte stále nefunguje, požiadaj svojho mentora/ku o pomoc. +Aby si mala prístup k detailným chybovým hláškam, môžeš si aktivovať debug logy vo svojej Glitch aplikácii. Pridaj nasledovné na koniec súboru `mysite/settings.py`. + +{% filename %}mysite/settings.py{% endfilename %} + +```python +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + 'file': { + 'level': 'DEBUG', + 'class': 'logging.FileHandler', + 'filename': 'debug.log', + }, + }, + 'loggers': { + 'django': { + 'handlers': ['file'], + 'level': 'DEBUG', + 'propagate': True, + }, + }, +} +``` + +Toto vytvorí súbor `debug.log`, v ktorom nájdeš detaily o tom, čo Django robí, ako aj chybové hlášky, ktoré sa môžu vyskytnúť. Toto ti značne uľahčí opravovanie tvojej stránky, ak niečo nebude fungovať. + +Prvotný reštart tvojho Glitch projektu by mal zlyhať. (Keď klikneš na tlačítko `Show` hore a potom na `In a New Window`, mala by si sa dostať po chybovú hlášku `DisallowedHost`.) V tejto chvíli sa tým nemusíš zaoberať, tutoriál to vyrieši v momente, keď budeš meniť nastavenia svojho Django projektu v súbore `mysite/settings.py`. + +### Virtuálne prostredie + +Virtuálne prostredie (tiež nazývané virtualenv) je ako súkromná krabica, do ktorej môžeme uložiť užitočný počítačový kód pre projekt, na ktorom pracujeme. Používame ho na oddelenie rôznych častí kódu pre rôzne projekty, aby sa nám medzi nimi nepomiešali veci. -Ďalej zadaj nasledovné príkazy: +Spusti: {% filename %}Cloud 9{% endfilename %} mkdir djangogirls cd djangogirls - python3.6 -mvenv myvenv + python3 -m venv myvenv source myvenv/bin/activate - pip install django~=1.11.0 + pip install django~={{ book.django_version }} -(všimni si, že v poslednom riadku sme použili vlnovku a za ňou znamienko rovnosti). +(všimni si, že v poslednom riadku sme použili vlnovku a za ňou znamienko rovnosti: `~=`). ### GitHub @@ -53,8 +151,8 @@ Vytvor si [GitHub](https://github.com) účet. ### PythonAnywhere -Django Girls tutoriál obsahuje kapitolu o tom čomu sa hovorí nasadenie (Deployment). Je to proces prenesenia kódu, ktorý používa tvoja nová webová aplikácia, na verejne dostupný počítač (ešte nazývaný aj server), aby aj ostatní ľudia videli tvoju prácu. +DjangoGirls tutoriál obsahuje kapitolu o niečom, čomu sa hovorí nasadenie (deployment). Je to proces prenesenia kódu, ktorý poháňa tvoju novú webovú aplikáciu, na verejne dostupný počítač (ešte nazývaný aj server), aby aj ostatní ľudia videli tvoju prácu. -Táto časť je trochu divná, keď pracuješ s týmto tutoriálom na Chromebooku, lebo už používaš počítač, ktorý je na internete (na rozdiel od notebooku). Napriek tomu, je stále užitočná, lebo si môžeme predstaviť Cloud 9 pracovné prostredie ako miesto kde sa nachádza nedokončená práca a Python Anywhere ako miesto, kde ukážeme našu prácu, ktorá bude hotová. +Táto časť je trochu zvláštna, keď pracuješ s týmto tutoriálom na Chromebooku, lebo už používaš počítač, ktorý je na internete (na rozdiel od notebooku). Napriek tomu je stále užitočná, lebo si môžeme predstaviť pracovné prostredie Cloud 9 ako miesto, kde sa nachádza nedokončená práca, a PythonAnywhere ako miesto, kde ukážeme našu prácu, keď bude hotová. -Teda vytvor si nový Python Anywhere účet na [www.pythonanywhere.com](https://www.pythonanywhere.com). \ No newline at end of file +Tak si vytvor nový PythonAnywhere účet na [www.pythonanywhere.com](https://www.pythonanywhere.com). \ No newline at end of file diff --git a/sk/code_editor/README.md b/sk/code_editor/README.md old mode 100755 new mode 100644 index 3ae9c68b59f..e9e19606304 --- a/sk/code_editor/README.md +++ b/sk/code_editor/README.md @@ -1,11 +1,11 @@ # Editor kódu -> Pre čitateľov doma: Táto kapitola je spracovaná v [Installing Python & Code Editor](https://www.youtube.com/watch?v=pVTaqzKZCdA&t=4m43s) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Installing Python & Code Editor](https://www.youtube.com/watch?v=pVTaqzKZCdA&t=4m43s). O chvíľu napíšeš svoj prvý riadok kódu, takže je načase si stiahnuť editor kódu! -> **Poznámka:** Ak používaš Chromebook, preskoč túto kapitolu a postupuj podľa pokynov na [nastavenie Chromebooku](../chromebook_setup/README.md). +> **Poznámka** Ak používaš Chromebook, preskoč túto kapitolu a postupuj podľa pokynov na [nastavenie Chromebooku](../chromebook_setup/README.md). Cloud IDE, ktoré si si vybrala (PaizaCloud Cloud IDE alebo AWS Cloud9) už obsahuje editor kódu. Keď si otvoríš nejaký súbor vo svojom IDE pomocou menu File, automaticky budeš tento editor používať. > -> **Poznámka** Toto si už možno urobila v kapitole Inštalácia - ak áno, môžeš pokračovať rovno na ďalšiu kapitolu! +> **Poznámka** Toto si už možno urobila v [kapitole Inštalácia](../installation/README.md) - ak áno, môžeš preskočiť rovno na ďalšiu kapitolu! {% include "/code_editor/instructions.md" %} \ No newline at end of file diff --git a/sk/code_editor/instructions.md b/sk/code_editor/instructions.md old mode 100755 new mode 100644 index 1ae898eb081..0e3506dbe23 --- a/sk/code_editor/instructions.md +++ b/sk/code_editor/instructions.md @@ -1,31 +1,37 @@ -Existuje veľa rôznych editorov a zväčša sa vyberajú podľa osobných preferencií. Väčšina Python programátorov používa zložité, ale veľmi výkonné IDE (integrované vývojové prostredie), ako napríklad PyCharm. Pre začiatočníka je to pravdepodobne menej vhodné; naše odporúčania sú rovnako výkonné, ale oveľa jednoduchšie. +Existuje veľa rôznych editorov a zväčša sa vyberajú podľa osobných preferencií. Väčšina programátorov a programátoriek v Pythone používa zložité, ale veľmi výkonné IDE (integrované vývojové prostredie) ako napríklad PyCharm. Pre začiatočníčku je to pravdepodobne menej vhodné; naše odporúčania sú rovnako výkonné, ale oveľa jednoduchšie. -Naše návrhy sú uvedené nižšie, ale neváhaj sa opýtať svojho mentora, aké sú jeho preferencie - bude ti jednoduchšie vedieť pomocť. +Naše návrhy sú uvedené nižšie, ale neváhaj sa opýtať svojej mentorky alebo mentora, aké sú ich preferencie - bude ti jednoduchšie vedieť pomocť. + +## Visual Studio Code + +Visual Studio Code je editor zdrojového kódu, ktorý vyvíja Microsoft pre Windows, Linux a macOS. Podporuje debugovanie, priamu prácu s Gitom, zvýrazňovanie syntaxe, inteligentné dopĺňanie kódu, snippety a refaktorovanie kódu. + +[Stiahni si ho odtiaľto](https://code.visualstudio.com/) ## Gedit -Gedit je open-source, zdarma, dostupný pre všetky operačné systémy. +Gedit je open source editor zdarma dostupný pre všetky operačné systémy. [Stiahni si ho odtiaľto](https://wiki.gnome.org/Apps/Gedit#Download) ## Sublime Text -Sublime Text je veľmi populárny editor so skúšobnou verziou zdarma. Je jednoduchý na inštaláciu a používanie, je dostupný pre všetky operačné systémy. +Sublime Text je veľmi populárny editor so skúšobnou verziou zdarma a je dostupný pre všetky operačné systémy. [Stiahni si ho odtiaľto](https://www.sublimetext.com/) ## Atom -Atom je veľmi nový editor vytvorený [GitHubom](https://github.com/). Je zdarma, open-source, jednoduchý na inštaláciu a používanie. Je dostupný pre Windows, OS X a Linux. +Atom je ďalší populárny editor. Je zdarma, open source a dostupný pre Windows, OS X a Linux. Atom je vyvíjaný [GitHubom](https://github.com/). [Stiahni si ho odtiaľto](https://atom.io/) -## Prečo inštalujeme editor? +## Prečo inštalujeme editor kódu? -Môže ťa zaujímať, prečo inštalujeme takýto špeciálny editor kódu, namiesto aby sme použili niečo ako Word alebo Notepad. +Možno ti napadlo, prečo inštalujeme takýto špeciálny editor kódu namiesto toho, aby sme použili niečo ako Word alebo Notepad. -Prvý dôvod je, že kód musí byť **čistý text** a problém s editormi ako Word a Textedit je ten, že v skutočnosti nevytvárajú čistý text, produkujú obohatený text (s fontom a formátovaním), používajú vlastné formáty ako [RTF (Rich Text Format)](https://en.wikipedia.org/wiki/Rich_Text_Format). +Prvý dôvod je, že kód musí byť **čistý text** a problém s editormi ako Word a Textedit je ten, že v skutočnosti nevytvárajú čistý text, ale produkujú obohatený text (s fontami a formátovaním) a používajú vlastné formáty ako [RTF (Rich Text Format)](https://en.wikipedia.org/wiki/Rich_Text_Format). Druhý dôvod je, že editor kódu je špecializovaný na editáciu kódu, takže môže poskytovať pomocné funkcie ako zvýraznenie kódu farbou podľa jeho významu, alebo automaticky za teba uzatvárať úvodzovky. -Všetko uvidíme neskôr. Čoskoro budeš považovať svoj verný editor za svoj obľúbený nástroj. :) +Všetko uvidíme neskôr. Čoskoro budeš považovať svoj verný editor za svoj obľúbený nástroj. :) \ No newline at end of file diff --git a/sk/css/README.md b/sk/css/README.md old mode 100755 new mode 100644 index 32c32737482..a264a8e7e4a --- a/sk/css/README.md +++ b/sk/css/README.md @@ -1,31 +1,30 @@ -# CSS - skrášli to! +# CSS - skrášlime to! Náš blog vyzerá zatiaľ dosť škaredo, však? Je čas to napraviť! Použijeme na to CSS. ## Čo je CSS? -Kaskádové štýly (CSS, angl. Cascading Style Sheets) je jazyk, ktorý sa používa na popis vzhľadu a formátovania webstránky napísanej v značkovacom jazyku (napríklad HTML). Predstav si to ako make-up pre našu webstránku. ;) +Kaskádové štýly (CSS, angl. Cascading Style Sheets) sú jazyk, ktorý sa používa na popis vzhľadu a formátovania webstránky napísanej v markupovom jazyku (napríklad HTML). Predstav si to ako make-up pre našu webstránku. ;) -Ale nechceme začať od nuly, že? Znovu budeme používať niečo, čo programátori zverejnili na internete zadarmo. Ako vieš, vymýšlať koleso nie je žiadna zábava. +Ale nechceme začať zase od nuly, že? Znovu použijeme niečo, čo iné programátorky a programátori zverejnili na internete zadarmo. Ako vieš, vymýšlať koleso nie je žiadna zábava. ## Použime Bootstrap! Bootstrap je jedným z najpopulárnejších HTML a CSS frameworkov pre vývoj krásnych webových stránok: https://getbootstrap.com/ -Bol napísaný programátormi, ktorí pracovali pre Twitter. Teraz je vyvíjaný dobrovoľníkmi z celého sveta! +Bol napísaný programátormi a programátorkami, ktorí pracovali pre Twitter. Teraz je vyvíjaný dobrovoľníkmi a dobrovoľníčkami z celého sveta! ## Inštalácia Bootstrapu -Aby si nainštalovala Bootstrap, potrebuješ pridať nasledovnú vec do `` tvojho `.html` súboru: +Aby si nainštalovala Bootstrap, otvor svoj súbor `.html` vo svojom editore a pridaj toto do sekcie ``: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html - - + ``` -Nepridá to do tvojho projektu žiadne súbory. Iba to ukazuje na súbory, ktoré už existujú na Internete. Skúsme to, otvor svoju webstránku a obnov stránku. Už to máme! +Nepridá to do tvojho projektu žiadne súbory. Iba to ukazuje na súbory, ktoré už existujú na internete. Skúsme to, otvor svoju webstránku a obnov stránku. Už to máme! ![Obrázok 14.1](images/bootstrap1.png) @@ -33,11 +32,11 @@ Už to vyzerá lepšie! ## Statické súbory v Djangu -Konečne sa pozrieme zblízka na veci, ktoré nazývame **statické súbory**. Statické súbory sú všetky vaše CSS a obrázky. Ich obsah nie je závislý na kontexte žiadosti a budú rovnaké pre každého používateľa. +Konečne sa pozrieme zblízka na veci, ktoré nazývame **statické súbory**. Statické súbory sú všetky tvoje CSS a obrázky. Ich obsah nie je závislý na kontexte žiadosti a budú rovnaké pre každého používateľa či používateľku. ### Kam umiestniť statické súbory pre Django -Django už vie, kde nájsť statické súbory pre zabudovanú aplikáciu "admin". Teraz už len musíme pridať niektoré statické súbory pre našu vlastnú aplikáciu, `blog`. +Django už vie, kde nájsť statické súbory pre zabudovanú aplikáciu "admin". Teraz už len musíme pridať niektoré statické súbory pre našu vlastnú aplikáciu `blog`. To urobíme tak, že vo vnútri našej aplikácie blog vytvoríme adresár s názvom `static`: @@ -64,31 +63,32 @@ Vytvorme teraz CSS súbor, ktorý tvojej web stránke pridá tvoj vlastný štý Je čas napísať trochu CSS! Otvor v editore kódu súbor `blog/static/css/blog.css`. -Tu sa nebudeme do hĺbky zaoberať úpravou a štúdiom CSS. Na konci tejto stránky sa nachádza odkaz na bezplatný CSS kurz, ak sa o tom cheš dozvedieť viacej. +Tu sa nebudeme do hĺbky zaoberať úpravou a štúdiom CSS. Na konci tejto stránky sa nachádza odkaz na bezplatný CSS kurz, ak sa o tom chceš dozvedieť viac. -Ale urobme aspoň niečo. Čo keby sme zmenili farbu hlavičky? Počítače používajú špeciálne kódy, aby rozumeli farbám. Tieto kódy sa začínajú `#` potom nasleduje 6 písmen (A-F) a číslice (0-9). Napríklad kód pre modrú je `#0000FF`. Kódy farieb nájdeš napríklad tu: http://www.colorpicker.com/. Môžeš tiež použiť [preddefinované farby](http://www.w3schools.com/colors/colors_names.asp) ako napríklad `red` (červená) alebo `green` (zelená). +Ale urobme aspoň niečo. Čo keby sme zmenili farbu hlavičiek? Počítače používajú špeciálne kódy, aby rozumeli farbám. Tieto kódy sa začínajú `#` potom nasleduje 6 písmen (A-F) a číslic (0-9). Napríklad kód pre modrú je `#0000FF`. Kódy farieb nájdeš napríklad tu: http://www.colorpicker.com/. Môžeš tiež použiť [preddefinované farby](http://www.w3schools.com/colors/colors_names.asp) ako napríklad `red` (červená) alebo `green` (zelená). -V súbore `blog/static/css/blog.css` pridaj nasledujúci kód: +Do súboru `blog/static/css/blog.css` pridaj nasledujúci kód: {% filename %}blog/static/css/blog.css{% endfilename %} ```css -h1 a { - color: #FCA205; +h1 a, h2 a { + color: #C25100; } + ``` -`h1 a` je CSS Selector. To znamená, že sme naše štýly použili na akýkoľvek prvok `a`, vo vnútri prvku `h1`. Takže keď máme niečo ako: `

link

` použije sa naň `h1 a` štýl. V tomto prípade elementu hovoríme, aby zmenil svoju farbu na `#FCA205`, čo je oranžová. Samozrejme, sem môžeš zadať vlastnú farbu! +`h1 a` je CSS selektor. Znamená to, že aplikujeme naše štýly na všetky `a` elementy, ktoré sa nachádzajú vnútri `h1` elementu. Selektor `h2 a` robí presne to isté, akurát pre elementy `h2`. Takže keď máme niečo ako: `

link

`, použije sa na to štýl `h1 a`. V tomto prípade elementu hovoríme, aby zmenil svoju farbu na `#FCA205`, čo je tmavooranžová. Alebo si môžeš vybrať vlastnú farbu, akurát daj pozor, aby dobre kontrastovala s bielym pozadím! -V CSS súbore definujeme štýly pre elementy v HTML súbore. Prvý spôsob, akým môžme identifikovať elementy je názov elementu. Môžno si pamätáte tieto značky z HTML sekcie. Veci ako `a`,`h1`, a `body` sú príklady názvov elementov. Elementy taktiež identifikujeme pomocou atribútu `class` alebo atribútu `id`. Triedy (class) a id sú názvy, ktorými nazveš elementy. Triedy definujú skupiny elementov a id-čká poukazujú na konkrétne elementy. Napríklad, nasledujúci tag môže byť identifikovaný v CSS pomocou mena tagu `a`, triedy `external_link`, alebo id `link_to_wiki_page`: +V CSS súbore definujeme štýly pre elementy v HTML súbore. Prvý spôsob, akým môžme identifikovať elementy, je názov elementu. Môžno si pamätáš tieto tagy z HTML sekcie. Veci ako `a`,`h1`, a `body` sú príklady názvov elementov. Elementy taktiež identifikujeme pomocou atribútu `class` alebo atribútu `id`. Triedy (class) a id sú názvy, ktorými nazveš elementy. Triedy definujú skupiny elementov a id-čká poukazujú na konkrétne elementy. Napríklad nasledujúci element môže byť identifikovaný v CSS pomocou názvu `a`, triedy `external_link`, alebo id `link_to_wiki_page`: ```html ``` -O [CSS selektoroch ](http://www.w3schools.com/cssref/css_selectors.asp) si môžeš prečítať viac na stránkach w3schools. +O [CSS selektoroch](http://www.w3schools.com/cssref/css_selectors.asp) si môžeš prečítať viac na stránkach w3schools. -Ešte musíme povedať našej HTML šablóne, že sme pridali nejaké CSS. Otvor súbor `blog/templates/blog/post_list.html` a pridaj tento riadok na úplný začiatok: +Ešte musíme povedať našej HTML šablóne, že sme pridali nejaké CSS. Otvor súbor `blog/templates/blog/post_list.html` v editore a pridaj tento riadok na úplný začiatok: {% filename %}blog/templates/blog/post_list.html{% endfilename %} @@ -96,7 +96,7 @@ Ešte musíme povedať našej HTML šablóne, že sme pridali nejaké CSS. Otvor {% load static %} ``` -Tu sme len nahrali statické súbory. :) Medzi `` a ``, po odkazoch na Bootstrap CSS súbory pridať tento riadok: +Tu sme len nahrali statické súbory. :) Medzi tagmi `` a ``, po odkazoch na bootstrapové CSS súbory, pridaj tento riadok: {% filename %}blog/templates/blog/post_list.html{% endfilename %} @@ -104,7 +104,7 @@ Tu sme len nahrali statické súbory. :) Medzi `` a ``, po odkazoch ``` -Prehliadač číta súbory ktoré dostane zaradom, takže musíme sa uistiť, že sú na správnom mieste. Inak kód v našich súboroch môžu byť prepísané kódom z Bootstrap súborov. Práve sme našej šablóne povedali, kde sa nachádza náš CSS súbor. +Prehliadač číta súbory, ktoré dostane, zaradom, takže sa musíme uistiť, že sú na správnom mieste. Inak kód v našich súboroch môže byť prepísaný kódom z boostrapových súborov. Práve sme našej šablóne povedali, kde sa nachádza náš CSS súbor. Súbor by mal teraz vyzerať asi takto: @@ -112,34 +112,34 @@ Súbor by mal teraz vyzerať asi takto: ```html {% load static %} + Django Girls blog - - + -
+

Django Girls Blog

-
+ {% for post in posts %} -
-

published: {{ post.published_date }}

-

{{ post.title }}

+
+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} ``` -OK, ulož súbor a obnov stránku! +OK, súbor ulož a obnov stránku! ![Obrázok 14.2](images/color2.png) -Pekne! Možno by sme chceli dať našej webovej stránke trochu vzduchu. Zväčšíme okraj na ľavej strane? Skúsme to! +Pekne! Možno by sme chceli dať našej webovej stránke trochu priestoru na dýchanie. Zväčšíme okraj na ľavej strane? Skúsme to! {% filename %}blog/static/css/blog.css{% endfilename %} @@ -149,7 +149,7 @@ body { } ``` -Pridaj to do svojho CSS, ulož súbor a pozri, ako to funguje! +Pridaj to do svojho CSS, súbor ulož a pozri, ako to funguje! ![Obrázok 14.3](images/margin2.png) @@ -163,13 +163,13 @@ Mohli by sme trochu upraviť font v našej hlavičke, nie? Skopíruj toto do svo Rovnako ako predtým, skontroluj poradie a umiestni pred odkaz na `blog/static/css/blog.css`. Tento riadok bude importovať font pod názvom *Lobster* z Google Fonts (https://www.google.com/fonts). -Nájdite `h1 a` deklaračný blok (kód medzi zátvorkami `{` a `}`) v súbore CSS ` blog/static/css/blog.css `. Teraz pridajte riadok` font-family: 'Lobster';` medzi zátvorky a obnovte stránku: +Nájdi deklaračný blok `h1 a` (kód medzi zátvorkami `{` a `}`) v CSS súbore `blog/static/css/blog.css`. Teraz pridaj riadok `font-family: 'Lobster';` medzi zátvorky a obnov stránku: {% filename %}blog/static/css/blog.css{% endfilename %} ```css -h1 a { - color: #FCA205; +h1 a, h2 a { + color: #C25100; font-family: 'Lobster'; } ``` @@ -178,52 +178,57 @@ h1 a { Super! -Ako bolo uvedené vyššie, CSS má koncept tried. Triedy umožnia pomenovať časti HTML kódu a použiť štýly iba na tejto časti, bez ovplyvnenia ostatných častí. To môže byť super užitočné! Možno máš dva div-y, ktoré robia niečo iné (ako hlavička a tvoj príspevok). Triedy ti umožnia aby vyzerala každá inak. +Ako bolo uvedené vyššie, CSS má koncept tried. Triedy ti umožňujú pomenovať časti HTML kódu a použiť štýly iba na tejto časti bez zasahovania do iných častí. To môže byť veľmi užitočné! Možno máš dva divy, ktoré robia niečo iné (ako tvoja hlavička a tvoj príspevok). Triedy ti pomôžu docieliť, aby vyzerali každý inak. -Skús pomenovať niektoré časti HTML kódu. Pridaj triedu s názvom `page-header` do `div`u, ktorý obsahuje takúto nejakú hlavičku: +Poďme skúsiť pomenovať niektoré časti HTML kódu. Zmeň `header`, ktorý obsahuje tvoju hlavičku, takto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html - + ``` -A teraz pridaj triedu, `post` do `div`u, v ktorom je blog post. +A teraz pridaj triedu `post` do tvojho `article`, v ktorom je blog post. {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html -
-

published: {{ post.published_date }}

-

{{ post.title }}

+
+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ ``` -Teraz pridáme deklarácie rôznym selektorom. Selektory, ktoré začínajú `.` sa týkajú tried. Na webe je ohľadne CSS veľa skvelých tutorialov a vysvetlení, ktoré ti pomôžu pochopiť nasledujúci kód. Ale teraz len skopíruj a vlož nasledujúci kód do súboru `blog/static/css/blog.css`: +Teraz pridáme deklarácie pre rôzne selektory. Selektory, ktoré začínajú znamienkom `.`, sa týkajú tried. Na webe je ohľadne CSS veľa skvelých tutorialov a vysvetlení, ktoré ti pomôžu pochopiť nasledujúci kód. Ale teraz len skopíruj a vlož nasledujúci kód do tvojho súboru `blog/static/css/blog.css`: {% filename %}blog/static/css/blog.css{% endfilename %} ```css .page-header { - background-color: #ff9400; + background-color: #C25100; margin-top: 0; + margin-bottom: 40px; padding: 20px 20px 20px 40px; } -.page-header h1, .page-header h1 a, .page-header h1 a:visited, .page-header h1 a:active { +.page-header h1, +.page-header h1 a, +.page-header h1 a:visited, +.page-header h1 a:active { color: #ffffff; font-size: 36pt; text-decoration: none; } -.content { - margin-left: 40px; -} - -h1, h2, h3, h4 { +h1, +h2, +h3, +h4 { font-family: 'Lobster', cursive; } @@ -235,11 +240,14 @@ h1, h2, h3, h4 { float: right; } -.post-form textarea, .post-form input { +.post-form textarea, +.post-form input { width: 100%; } -.top-menu, .top-menu:hover, .top-menu:visited { +.top-menu, +.top-menu:hover, +.top-menu:visited { color: #ffffff; float: right; font-size: 26pt; @@ -250,22 +258,40 @@ h1, h2, h3, h4 { margin-bottom: 70px; } -.post h1 a, .post h1 a:visited { +.post h2 a, +.post h2 a:visited { color: #000000; } + +.post > .date, +.post > .actions { + float: right; +} + +.btn-secondary, +.btn-secondary:visited { + color: #C25100; + background: none; + border-color: #C25100; +} + +.btn-secondary:hover { + color: #FFFFFF; + background-color: #C25100; +} ``` -Teraz s deklaráciami tried obklop HTML kód, ktorý zobrazuje posty. Nahraď toto: +Teraz deklaráciami tried obklop HTML kód, ktorý zobrazuje posty. Nahraď toto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html {% for post in posts %} -
-

published: {{ post.published_date }}

-

{{ post.title }}

+
+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} ``` @@ -274,31 +300,31 @@ v súbore `blog/templates/blog/post_list.html` týmto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html -
+
-
+
{% for post in posts %} -
-
-

published: {{ post.published_date }}

-
-

{{ post.title }}

+
+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %}
-
+
``` Ulož tieto súbory a obnov svoju web stránku. ![Obrázok 14.4](images/final.png) -Woohoo! Vyzerá to úžasne, že áno? Pozrite sa na kód, ktorý sme práve vložili, nájdi miesta, kde sme pridali triedy v HTML a použili sme ich v CSS. Kde by si spravila zmenu, ak by si chcela dátum, tyrkysovej farby? +Super! Vyzerá to úžasne, nie? Pozri sa na kód, ktorý sme práve vložili, a nájdi miesta, kde sme pridali triedy v HTML a použili sme ich v CSS. Kde by si spravila zmenu, ak by si chcela dátum spraviť tyrkysový? -Neboj sa trochu pohrať s týmto CSS a pokús sa zmeniť niektoré veci. Hraním sa s CSS, môžeš pochopiť, čo robia rôzne veci. Ak niečo pokazíš, neboj sa, môžeš vždy vrátiť zmeny späť! +Neboj sa trochu pohrať s týmto CSS a poskúšať pomeniť niektoré veci. Hranie sa s CSS ti pomôže porozumieť tomu, čo robia rôzne veci. Ak niečo pokazíš, neboj sa, môžeš vždy vrátiť zmeny späť! -Naozaj odporúčame, tento kurz zadarmo on-line [ CSS & Codeacademy HTML](https://www.codecademy.com/tracks/web). Môžeš sa dozvedieť všetko o tom, ako môžeš svoje stránky skrášliť pomocou CSS. +Vrelo odporúčame online kurzy zdarma "Basic HTML & HTML5" a "Basic CSS" na [freeCodeCamp](https://learn.freecodecamp.org/). Naučia ťa všetko o tom, ako môžeš svoje stránky skrášliť pomocou HTML a CSS. Pripravená na ďalšiu kapitolu?! :) \ No newline at end of file diff --git a/sk/deploy/README.md b/sk/deploy/README.md old mode 100755 new mode 100644 index 5732ecf45b7..75cdc5f1b5b --- a/sk/deploy/README.md +++ b/sk/deploy/README.md @@ -1,64 +1,108 @@ # Nasadenie! -> **Poznámka** Občas bude možno trochu ťažké prehrýzť sa touto kapitolou. Vydrž a dokonči ju, nasadenie je dôležitou časťou vývoja webových stránok. Táto kapitola je umiestnená uprostred tutoriálu, aby ti mentor/ka mohol/a pomôcť s trochu náročnejšími časťami procesu spúšťania tvojej webovej stránky online. To znamená, že môžeš dokončiť tutoriál aj sama, ak ti nevyjde čas. +> **Poznámka** Môže byť trochu ťažké prehrýzť sa touto kapitolou. Vydrž a dokonči ju, nasadenie je dôležitou časťou vývoja webových stránok. Táto kapitola je umiestnená uprostred tutoriálu, aby ti mentor či mentorka mohli pomôcť s trochu náročnejšími časťami procesu spúšťania tvojej webovej stránky online. To znamená, že môžeš dokončiť tutoriál aj sama, ak ti nevyjde čas. -Až do teraz, tvoja webová stránka bola dostupná len v počítači. Teraz sa naučíš, ako ju nasadiť! Nasadenie je proces publikovania aplikácie na internete, takže ju ľudia konečne budú môcť vidieť. :) +Až do tohto momentu bola tvoja webová stránka dostupná len v tvojom počítači. Teraz sa naučíš, ako ju nasadiť! Nasadenie (deployment) je proces publikovania aplikácie na internete, aby ju všetci konečne mohli vidieť. :) -Ako už vieš, webová stránka musí byť umiestnená na serveri. Na Internete je dostupné mnoho poskytovateľov servrov, my použijeme [PythonAnywhere](https://www.pythonanywhere.com/). PythonAnywhere je bezplatný pre malé aplikácie, ktoré nemajú príliš veľa návštevníkov, takže zatiaľ ti to určite bude stačiť. +Ako už vieš, webová stránka musí byť umiestnená na serveri. Na internete existuje množstvo poskytovateľov serverov, my použijeme [PythonAnywhere](https://www.pythonanywhere.com/). PythonAnywhere je bezplatný pre malé aplikácie, ktoré nemajú príliš veľa návštevníkov a návštevníčok, takže zatiaľ ti to určite bude stačiť. -Ďalšou externou službou, ktorú budeme využívať je [GitHub](https://www.github.com), kde sa uchovávajú zdrojové kódy. Existujú aj ďalšie podobné služby, no dnes už majú takmer všetci programátori na GitHube konto a teraz ho už budeš mať aj ty! +Ďalšou externou službou, ktorú budeme využívať, je [GitHub](https://www.github.com), kde sa uchovávajú zdrojové kódy. Existujú aj ďalšie podobné služby, no v dnešnej dobe už majú takmer všetci programátori a programátorky githubové konto a teraz ho už budeš mať aj ty! -Tieto tri miesta budú pre teba dôležité. Lokálny počítač bude miestom, kde budeš vyvíjať a testovať. Keď si spokojná so zmenami, uložíš kópiu programu na GitHub. Tvoja webová stránka bude na PythonAnywhere a budeš ju aktualizovať stiahnutím novej kópie svojho kódu z GitHub-u. +Tieto tri miesta budú pre teba dôležité. Lokálny počítač bude miestom, kde budeš vyvíjať a testovať. Keď si spokojná so zmenami, uložíš kópiu programu na GitHub. Tvoja webová stránka bude na PythonAnywhere a budeš ju aktualizovať stiahnutím novej kópie svojho kódu z GitHubu. # Git -> **Poznámka** Ak už máš za sebou inštaláciu, nemusíš to robiť znovu a môžeš preskočiť na ďalšiu časť a začať s vytváraním Git repozitára. +> **Poznámka** Ak už máš za sebou [inštaláciu](../installation/README.md), nemusíš toto robiť znova - môžeš preskočiť na ďalšiu časť a začať s vytváraním vlastného Git repozitára. {% include "/deploy/install_git.md" %} ## Založenie Git repozitára -Git sleduje zmeny na konkrétnej množine súborov, v niečom, čo sa nazýva úložisko kódu alebo repozitár (skrátene "repo"). Založme si repo pre náš projekt. Otvor konzolu a spusti nasledujúce príkazy v adresári `djangogirls`: +Git sleduje zmeny na konkrétnej skupine súborov, v niečom, čo sa nazýva úložisko kódu alebo repozitár (skrátene "repo"). Založme si repo pre náš projekt. Otvor konzolu a spusti nasledujúce príkazy v adresári `djangogirls`: -> **Poznámka** Skontroluj si aktuálny pracovný adresár s príkazom`pwd` (Mac OS X/Linux) alebo `cd` (Windows) pred inicializáciou repozitára. Mala by si byť v priečinku `djangogirls`. +> **Poznámka** Skontroluj si aktuálny pracovný priečinok príkazom `pwd` (Mac OS X/Linux) alebo `cd` (Windows) pred inicializáciou repozitára. Mala by si byť v priečinku `djangogirls`. {% filename %}command-line{% endfilename %} $ git init Initialized empty Git repository in ~/djangogirls/.git/ - $ git config --global user.name "Your Name" - $ git config --global user.email you@example.com + $ git config --global user.name "Tvoje Meno" + $ git config --global user.email ty@example.com -Inicializácia git repozitára je niečo, čo musíme urobiť len raz za projekt (a už nikdy nebudeš musieť znovu zadať užívateľské meno a e-mail). +Inicializácia Git repozitára je niečo, čo musíme urobiť len raz za projekt (a už nikdy nebudeš musieť znovu zadávať užívateľské meno a e-mail). + +### Upravenie názvu vetvy + +Vo verziách Gitu starších ako **2.28** budeš musieť zmeniť meno svojej vetvy na "main". Ak chceš zistiť, akú verziu Gitu máš, prosím, spusti nasledovný príkaz: + +{% filename %}command-line{% endfilename %} + + $ git --version + git version 2.xx... + + +V prípade, že druhé číslo verzie ("xx" vyššie) je menšie ako 28, budeš musieť spustiť nasledujúci príkaz, aby si premenovala svoju vetvu. Ak je to 28 alebo viac, pokračuj, prosím, sekciou "Ignorovanie súborov". Rovnako ako v časti "Inicializácia" je toto niečo, čo musíme spraviť len jeden jediný raz vrámci projektu, a aj to iba v prípade, ak je tvoja verzia Gitu menšia ako 2.28: + +{% filename %}command-line{% endfilename %} + + $ git branch -M main + + +### Ignorovanie súborov Git bude sledovať zmeny všetkých súborov a priečinkov v tomto adresári, ale sú aj niektoré súbory, ktoré chceme ignorovať. To urobíme tak, že vytvoríme súbor s názvom `.gitignore` v základnom adresári. Otvor si editor a vytvor nový súbor s týmto obsahom: {% filename %}.gitignore{% endfilename %} + # Python *.pyc *~ __pycache__ - myvenv + + # Env + .env + myvenv/ + venv/ + + # Database db.sqlite3 - /static + + # Static folder at project root + /static/ + + # macOS + ._* .DS_Store + .fseventsd + .Spotlight-V100 + + # Windows + Thumbs.db* + ehthumbs*.db + [Dd]esktop.ini + $RECYCLE.BIN/ + + # Visual Studio + .vscode/ + .history/ + *.code-workspace A ulož ho ako `.gitignore` v priečinku "djangogirls". -> **Poznámka** Bodka na začiatku názvu súboru je dôležitá! Ak máš problém vytvoriť takýto súbor (napríklad Macom sa nepáči, ak chceš cez Vyhľadávanie (Finder) vytvoriť súbory, ktoré sa začínajú bodkou), potom použi funkciu "Uložiť ako" vo svojom editore, to je spôsob akým sa to určite uloží. +> **Poznámka** Bodka na začiatku názvu súboru je dôležitá! Ak máš problém vytvoriť takýto súbor (napríklad Macom sa nepáči, ak chceš cez Vyhľadávanie (Finder) vytvoriť súbory, ktoré sa začínajú bodkou), potom použi funkciu "Uložiť ako" vo svojom editore, to funguje vždy. A daj pozor na to, aby si k názvu súboru nepridala `.txt`, `.py` alebo akúkoľvek inú koncovku - Git ho rozpozná, iba ak sa volá presne `.gitignore`. V Linuxe a MacOS sú súbory, ktoré začínajú `.` (ako `.gitignore`), považované za skryté a príkaz `ls` ich neukáže. Namiesto neho môžeš použiť `ls -a`, aby si súbor `.gitignore` videla. > -> **Poznámka** Jeden zo súborov, ktoré ste zadali v súbore `.gitignore` je `db.sqlite3`. Tento súbor je vaša lokálna databáza, kde sú všetky vaše príspevky skladované. Nechceme to pridať do repozitára, lebo tvoja webová stránka na PythonAnywhere bude používať inú databázu. Možno to bude SQLite, tak ako na stroji na ktorom vyvíjaš, ale zvyčajne použiješ databázu, ktorá sa volá MySQL, ktorá zvládne oveľa viac navštevníkov ako SQLite. Či tak alebo onak, ignorovaním SQLite databázy v kópii na GitHub-e, všetky príspevky, ktoré si vytvorila doteraz, zostanú dostupné len lokálne, a budeš ich musieť znovu pridať na produkčnej stránke. Svoju lokálnu databázu si môžeš predstaviť ako pieskovisko na ktorom si môžeš vyskúšať rôzne veci a nebáť sa že zmažeš reálne príspevky zo svojho blogu. +> **Poznámka** Jeden zo súborov, ktoré si spomenula vo svojom súbore `.gitignore`, je `db.sqlite3`. Tento súbor je tvoja lokálna databáza, kde sú uložení všetci tvoji používatelia/používateľky a príspevky. Budeme sa riadiť štandardnými programátorskými postupmi, čo znamená, že budeme používať dve rôzne databázy, jednu pre svoju vlastnú lokálnu testovaciu stránku a druhú pre svoju online stránku na PythonAnywhere. Na PythonAnywhere to možno bude SQLite, tak ako na stroji, na ktorom vyvíjaš, ale zvyčajne by si tam skôr použila databázu, ktorá sa volá MySQL, ktorá zvládne oveľa viac navštevníčiek a návštevníkov ako SQLite. Tak či onak, to, že ignoruješ svoju SQLite databázu v kópii pre GitHub, znamená, že všetky príspevky a superuser, ktorých si doteraz vytvorila, budú dostupní len lokálne, a na produkčnej verzii budeš musieť vytvoriť nových. Svoju lokálnu databázu si môžeš predstaviť ako pieskovisko, na ktorom si môžeš vyskúšať rôzne veci a nebáť sa, že zmažeš reálne príspevky zo svojho blogu. -Vždy je dobré použiť príkaz `git status` pred `git add` alebo kedykoľvek, keď si nebudeš istá, či sa niečo zmenilo. To ti pomôže vyhnúť sa prekvapeniam ako napríklad pridanie nesprávnych súborov. Príkaz `git status` dáva informácie o nesledovaných (untracked) či zmenených (modified) súboroch, alebo súboroch pripravených na zmenu (staged), o stave vetvy a veľa ďalších vecí. Výstup by mal byť podobný nasledovnému: +Vždy je dobré použiť príkaz `git status` pred `git add` alebo kedykoľvek, keď si nebudeš istá, čo sa zmenilo. Pomôže ti to vyhnúť sa prekvapeniam ako napríklad pridanie nesprávnych súborov. Príkaz `git status` vracia informácie o nesledovaných (untracked) či zmenených (modified) súboroch, alebo súboroch pripravených na zmenu (staged), o stave vetvy a veľa ďalších vecí. Výstup by mal byť podobný nasledovnému: {% filename %}command-line{% endfilename %} $ git status - On branch master + On branch main - Initial commit + No commits yet Untracked files: (use "git add ..." to include in what will be committed) @@ -67,143 +111,71 @@ Vždy je dobré použiť príkaz `git status` pred `git add` alebo kedykoľvek, blog/ manage.py mysite/ + requirements.txt nothing added to commit but untracked files present (use "git add" to track) -A nakoniec uložíme naše zmeny. Teraz prejdi na konzolu a zadaj nasledujúce príkazy: +A nakoniec uložíme naše zmeny. Prejdi na konzolu a zadaj nasledujúce príkazy: {% filename %}command-line{% endfilename %} - $ git add --all . + $ git add . $ git commit -m "My Django Girls app, first commit" - ``` [...] 13 files changed, 200 insertions(+) create mode 100644 .gitignore [...] create mode 100644 mysite/wsgi.py - ``` - - - ## Pushing your code to GitHub - - Go to [GitHub.com](https://www.github.com) and sign up for a new, free user account. (Ak si to už urobila počas prípravy na workshop, tak to je super!) - - Potom, vytvor nový repozitár a pomenuj ho "moj-prvy-blog". Checkbox "inicializuj s README" nechaj nezaškrtnutý, voľbu .gitignore nechaj prázdnu (urobili sme to manuálne) a Licenciu nechaj ako None. - - - - > **Poznámka** Názov `moj-prvy-blog` je dôležitý -- môžeš si vybrať aj niečo iné, ale v ďalších inštrukciách sa to bude vyskytovať veľakrát a musela by si to zakaždým nahradiť. Asi bude ľahšie, ak ostaneš pri názve `moj-prvy-blog`. - - Na ďalšej obrazovke, sa ti zobrazí URL tvojho klonu repozitára. Zvoľ "HTTPS" verziu, skopíruj ju a o chvíľu ju vložíme do terminálu: - - Teraz musíme prepjiť Git repozitár na tvojom počítači s tým na Githube. - - Napíš do konzoly nasledujúci príkaz: (nahraď `` svojím uživateľským menom na Githube, ale bez lemných zátvoriek): - - {% filename %}command-line{% endfilename %} -$ git remote add origin https://github.com//my-first-blog.git $ git push -u origin master +## Prenos nášho kódu na GitHub -
Zadaj svoje GitHub uživateľské meno a heslo a uvidíš niečo podobné tomuto: - - {% filename %}command-line{% endfilename %} - +Choď na [GitHub.com](https://www.github.com) a založ (Sign Up) si nový účet zdarma. (Ak si to už spravila počas prípravy na workshop, super!) Zapamätaj si svoje heslo (a pridaj si ho do svojho správcu hesiel, ak nejaký používaš). -Username for 'https://github.com': ola Password for 'https://ola@github.com': Counting objects: 6, done. Writing objects: 100% (6/6), 200 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/ola/my-first-blog.git +Potom vytvor nový repozitár a pomenuj ho "my-first-blog". Políčko "initialize with a README" nechaj nezaškrtnuté, voľbu .gitignore nechaj prázdnu (urobili sme to manuálne) a License nechaj ako None. -- [new branch] master -> master Branch master set up to track remote branch master from origin. +![](images/new_github_repo.png) -
<!--TODO: maybe do ssh keys installs in install party, and point ppl who dont have it to an extension --> - - Tvoj kód je na Githube. Kľudne si to over! Zistíš, že sa nachádza vo vyberanej spoločnosti - [Django](https://github.com/django/django), the [Django Girls Tutorial](https://github.com/DjangoGirls/tutorial), a mnoho iných skvelých open source-ových softvérových projektov ukladá svoj kód na GitHube. :) - - - # Umiestnenie nášho blogu na PythonAnywhere - - ## Vztvor si PythonAnywhere účet - - > **Poznámka** Možno si si už vytvorila účet na PythonAnzwhere počas inštalácie - ak áno, tak nemusíš to robiť znova. - - {% include "/deploy/signup_pythonanywhere.md" %} - - - ## Nastavenie našej stránky na PythonAnywhere - - Choď do hlavneho [PythonAnywhere panelu](https://www.pythonanywhere.com/) kliknutím na logo a klikni na spustenie "Bash" konzoly – to je PythonAnywhere verzia príkazového riadku, presne ako ten na tvojom počítači. - - <img src="images/pythonanywhere_bash_console.png" alt="Pointing at Bash in the New Console section" /> - - > **Poznámka** PythonAnywhere ja založené na Linuxe, takže ak používaš Windows, konzola sa bude líšiť od tej na tvojom počítači. - - Nasadenie webovej aplikácie na PythonAnywhere znamená stiahnutie kódu z GitHubu, a nakonfigurovania PythonAnywhere aby ho rozpoznal a začal ho poskytovať ako webovú aplikáciu. Sú manuálne spôsoby ako to urobiť, ale PythonAnywhere poskytuje pomocný nástroj, ktorý všetko urobí za teba. Nainštalujme ho najprv: - - {% filename %}PythonAnywhere command-line{% endfilename %} - +> **Poznámka** Názov `my-first-blog` je dôležitý -- mohla by si si vybrať aj niečo iné, ale bude sa to ďalej vyskytovať veľakrát a musela by si to zakaždým nahradiť. Pravdepodobne bude pohodlnejšie, ak ostaneš pri názve `my-first-blog`. -$ pip3.6 install --user pythonanywhere +Na nasledujúcej stránke sa ti ukáže klonovacia URL tvojho repa, ktorú budeme potrebovať v niektorých z nasledujúcich príkazov: -
Malo by to zobraziť niečo ako `Collecting pythonanywhere`, a ukončiť riadkom ktorý hovorí `Successfully installed (...) pythonanywhere- (...)`. - - Teraz spustíme pomocníka, ktorý automaticky nakonfiguruje našu aplikáciu z GitHubu. Zadaj nasledujúci príkaz do konzoly na PythonAnywhere (nezabudni použiť užívateľské meno z GitHubu namiesto <your-github-username>): - {% filename %}PythonAnywhere command-line{% endfilename %} - +![](images/github_get_repo_url_screenshot.png) -$ pa_autoconfigure_django.py https://github.com//my-first-blog.git +Teraz musíme pripojiť Git repozitár v tvojom počítači k tomu na GitHube. -
Kým sa pozerá ako to beží, uvidíš čo robí: - - - Sťahuje tvoj kód z GitHubu - - Vytvára virtualenv na PythonAnywhere, presne ako ten na tvojom PC - - Nastaví v sittings súbore niektoré nastavenia pre nasadenie - - Nastaví databázu na PythonAnywhere pomocou `manage.py migrate` príkazu - - Nastaví tvoje statické súbory (o nich si povieme neskôr) - - A nastaví PythonAnywhere aby ukazovalo tvoju webovú aplikáciu cez svoje API - - Na PythonAnywhere všetky tie kroky sú automatizované, ale sú to tie isté kroky, ktoré by si musela urobiť u hociktorého poskytovateľa serverov. Dôležitá vec, ktorú si treba teraz všimnúť je, že tvoja databáza na PYthonAnywhere je vlastne úplne iná a oddelená od databázy ba tvojom PC - to znamená, že budeš mať iné príspevky a admin účet. - - Kvôli tomu, presne ako sme to urobili na vlastnom počítači, musíme inicializovať admin účet pomocou `createsuperuser`. PythonAnywhere automaticky aktivoval tvoj virtualenv, takže celé čo potrebuješ urobiť, je spustiť: - - {% filename %}PythonAnywhere command-line{% endfilename %} - +Napíš do konzoly nasledujúci príkaz (nahraď `` svojím užívateľským menom na GitHube, ale bez špicatých zátvoriek - URL by mala byť rovnaká ako klonovacia URL, ktorú si práve videla). -(ola.pythonanywhere.com) $ python manage.py createsuperuser +{% filename %}command-line{% endfilename %} -
Zadaj detaily pre admin uživateľa. Najlepšie je použiť tie isté, ako používaš na vlastnom počítači a predísť tak zmätku, pokiaľ nechceš lepším heslom zabezpečiť PythonAnywhere. - - Teraz, ak chceš, možeš sa pozrieť na sovj kód na PythonAnywhere pomocou`ls`: - - {% filename %}PythonAnywhere command-line{% endfilename %} + $ git remote add origin https://github.com//my-first-blog.git + $ git push -u origin main -(ola.pythonanywhere.com) $ ls blog db.sqlite3 manage.py mysite static (ola.pythonanywhere.com) $ ls blog/ **init**.py **pycache** admin.py forms.py migrations models.py static templates tests.py urls.py views.py ``` +Keď pošleš niečo na GitHub, spýta sa ťa to na tvoje githubové meno a heslo (buď rovno v príkazovom riadku alebo vo vyskakovacom okne) a keď ich zadáš, mala by si vidieť niečo takéto: -Môžeš tiež ísť do záložky "Files" a pozrieť sa pomocou vbudovaného PythonAnywhere prehliadača súborov. - -## Si online! - -Tvoja stránka by teraz mala by dostupná na verejnom internete. Preklikni sa do PythonAnywhere "Web" záložky aby si získala link na ňu. Môžeš to vyzielať s kýmkoľvek :) - -## Tipy pre ladenie - -Ak uviídíš chybu počas behu `pa_autoconfigure_django.py` skriptu, toto sú najčastejšie dôvody: +{% filename %}command-line{% endfilename %} -- Zabuudla si vytvoriť PythonAnywhere API token. -- Urobila si chybu v tvojej GitHub URL -- Ak sa ti zobrazí chybové hlásenie, že *"Could not find your settings.py"*, pravdepodobne je to spôsobené tým že sa ti nepodarilo pridať všetky súbory do Git a/alebo sa ich nepodarilo úspešne pridať na GitHub. Znovu sa pozri na Git odstavec vyššie + Counting objects: 6, done. + Writing objects: 100% (6/6), 200 bytes | 0 bytes/s, done. + Total 3 (delta 0), reused 0 (delta 0) + To https://github.com/ola/my-first-blog.git + + * [new branch] main -> main + Branch main set up to track remote branch main from origin. + -Ak pri pokuse navštíviť svoju stránku uvidíš chybu, prvým miestom, kde hľadať problém je **error log**. Odkaz naňho nájdeš na PythonAnywhere v [záložke Web](https://www.pythonanywhere.com/web_app_setup/). Pozri, či tam nie sú nejaké chybové hlášky - tie najnovšie sú dolu. + -Môžeš skúsiť aj [Všeobecné tipy na ladenie na PythonAnywhere help stránke](http://help.pythonanywhere.com/pages/DebuggingImportError). +Tvoj kód je na GitHube. Choď sa naň pozrieť! Zistíš, že sa nachádza vo vyberanej spoločnosti - [Django](https://github.com/django/django), [Django Girls Tutorial](https://github.com/DjangoGirls/tutorial) a mnoho iných skvelých open sourcových softvérových projektov uchováva svoj kód na GitHube. :) -A nezabudni, tvoj mentor je tu na to, aby ti pomohol! +{% include "/deploy/pythonanywhere.md" %} -# Pozri sa na svoju stránku! +# Choď sa pozrieť na svoju stránku! -Hlavná stránka tvojej aplikácie by ťa mala vítať nápisom "It worked!", tak ako na tvojom počítači. Skús pridať `/admin/` na koniec adresy URL, a budeš presmerovaná na stránky administrácie. Prihlás sa s užívateľským menom a heslom a uvidíš, že môžeš pridávať nové príspevky (posty) na server. +Hlavná stránka tvojej aplikácie by ťa mala vítať nápisom "It worked!", tak ako na tvojom počítači. Skús pridať `/admin/` na koniec adresy URL, a budeš presmerovaná na stránky administrácie. Prihlás sa svojím menom a heslom a uvidíš, že môžeš na server pridať nové príspevky. Nezabudni, že príspevky z tvojej lokálnej testovacej databázy sme neposlali na tvoj online blog. -Keď vytvoríš niekolľko príspevkov, môžeš sa vrátiť do tvojho lokálneho prostredia (nie PythonAnywhere). Na zmenách by si mala pracovať v lokálnom prostredí. To je štandardný pracovný postup pri vývoji webových aplikácií - urobíš zmeny lokálne, dáš tieto zmeny na GitHub a stiahneš zmeny na svoj webový server. To ti umožní pracovať a experimentovať bez pokazenia živej webovej stránky. Docela cool, nie? +Keď vytvoríš niekoľko príspevkov, môžeš sa vrátiť do tvojho lokálneho prostredia (nie PythonAnywhere). Odteraz by si na zmenách mala pracovať vo svojom lokálnom prostredí. To je štandardný pracovný postup pri vývoji webových aplikácií - urobíš zmeny lokálne, dáš tieto zmeny na GitHub a stiahneš zmeny na svoj webový server. Vďaka tomu môžeš pracovať a experimentovať bez toho, aby si niečo pokazila na svojej online stránke. Celkom cool, že? -Môžeš si *pogratulovať*! Nasadenie serveru je jedna z najzradnejších častí vývoja web stránok a často zaberie ľuďom aj niekoľko dní, kým to spojazdnia. Ale ty už máš teraz svoju stránku online, na skutočnom internete! \ No newline at end of file +*PORIADNE* sa potľapkaj po chrbte! Nasadenie serveru je jedna z najzradnejších častí vývoja web stránok a často zaberie ľuďom aj niekoľko dní, kým to celé spojazdnia. Ale ty už máš svoju stránku online teraz, na skutočnom internete! \ No newline at end of file diff --git a/sk/deploy/install_git.md b/sk/deploy/install_git.md old mode 100755 new mode 100644 index 821a13fc302..7e50e429948 --- a/sk/deploy/install_git.md +++ b/sk/deploy/install_git.md @@ -1,11 +1,13 @@ -Git je "systém na správu verzií", ktorý využíva množstvo programátorov. Tento softvér sleduje v priebehu času zmeny v tvojich súboroch, takže sa kedykoľvek môžeš vrátiť ku konkrétnej verzii. Niečo ako funkcia "sledovať zmeny" vo Worde, ale oveľa výkonnejšie. +Git je "systém na správu verzií", ktorý využíva množstvo programátoriek a programátorov. Tento softvér sleduje v priebehu času zmeny v tvojich súboroch, takže sa kedykoľvek môžeš vrátiť ku konkrétnej verzii. Je to v podstate niečo ako nástroj na nasledovanie zmien v programoch na spracovanie textu (napr. Microsoft Word alebo LibreOffice Writer), ale omnoho mocnejšie. ## Inštalácia Gitu -Git si môžeš stiahnuť z [git-scm.com](https://git-scm.com/). Môžeš bez obáv klikať na "ďalej ďalej ďalej" pri všetkých krokoch okrem jedného. V kroku 5, označenom ako "Nastavenie prostredia PATH", zvoľ "Spustiť Git a príslušné Unixové nástroje z príkazového riadku systému Windows" (spodná možnosť). V ostatných prípadoch sú predvolené nastavenia v poriadku. Možnosť "Checkout Windows-style, commit Unix-style line endings" je OK. +Git si môžeš stiahnuť z [git-scm.com](https://git-scm.com/). Môžeš bez obáv klikať na "ďalej" pri všetkých krokoch okrem jedného. V kroku, kde to od teba bude chcieť, aby si si vybrala svoj editor, by si si mala vybrať Nano, a v kroku "Adjusting your PATH environment" zvoľ "Use Git and optional Unix tools from the Windows Command Prompt" (spodná možnosť). V ostatných prípadoch sú predvolené nastavenia v poriadku. Možnosť "Checkout Windows-style, commit Unix-style line endings" je OK. + +Ak ti bude počas inštalácie ponúknutá možnosť "Adjusting the name of the initial branch in new repositories", prosím, zvoľ "Override the default" a použi "main". Týmto bude tvoja inštalácia Gitu v súlade so všeobecným smerovaním globálnej programátorskej komunity. Vetvu "main" budeme používať v celom tomto tutoriáli. Pozri, prosím, na https://sfconservancy.org/news/2020/jun/23/gitbranchname/ a https://github.com/github/renaming pre viac detailov o tejto téme. Nezabudni reštartovať príkazový riadok alebo PowerShell po úspešnom dokončení inštalácie. @@ -14,7 +16,9 @@ data-collapse=true ces--> Stiahni si Git z [git-scm.com](https://git-scm.com/) a riaď sa inštrukciami. -> **Poznámka:** Ak používaš OS X 10.6, 10.7 alebo 10.8, budeš musieť nainštalovať verziu git-tu odtialto: [Git installer for OS X Snow Leopard](https://sourceforge.net/projects/git-osx-installer/files/git-2.3.5-intel-universal-snow-leopard.dmg/download) +Ak ti bude počas inštalácie ponúknutá možnosť "Adjusting the name of the initial branch in new repositories", prosím, zvoľ "Override the default" a použi "main". Týmto bude tvoja inštalácia Gitu v súlade so všeobecným smerovaním globálnej programátorskej komunity. Vetvu "main" budeme používať v celom tomto tutoriáli. Pozri, prosím, na https://sfconservancy.org/news/2020/jun/23/gitbranchname/ a https://github.com/github/renaming pre viac detailov o tejto téme. + +> **Poznámka** Ak používaš OS X 10.6, 10.7 alebo 10.8, budeš musieť nainštalovať verziu Gitu odtiaľto: [Git installer for OS X Snow Leopard](https://sourceforge.net/projects/git-osx-installer/files/git-2.3.5-intel-universal-snow-leopard.dmg/download) @@ -27,6 +31,15 @@ data-collapse=true ces--> $ sudo apt install git ``` +### Upravenie prednastaveného názvu vetvy + +Týmto bude tvoja inštalácia Gitu v súlade so všeobecným smerovaním globálnej programátorskej komunity. Vetvu "main" budeme používať v celom tomto tutoriáli. Pozri, prosím, na https://sfconservancy.org/news/2020/jun/23/gitbranchname/ a https://github.com/github/renaming pre viac detailov o tejto téme. + +{% filename %}command-line{% endfilename %} + + $ git config --global --add init.defaultBranch main + + $ sudo dnf install git ``` +### Upravenie prednastaveného názvu vetvy + +Týmto bude tvoja inštalácia Gitu v súlade so všeobecným smerovaním globálnej programátorskej komunity. Vetvu "main" budeme používať v celom tomto tutoriáli. Pozri, prosím, na https://sfconservancy.org/news/2020/jun/23/gitbranchname/ a https://github.com/github/renaming pre viac detailov o tejto téme. + +{% filename %}command-line{% endfilename %} + + $ git config --global --add init.defaultBranch main + + $ sudo zypper install git ``` +### Upravenie prednastaveného názvu vetvy + +Týmto bude tvoja inštalácia Gitu v súlade so všeobecným smerovaním globálnej programátorskej komunity. Vetvu "main" budeme používať v celom tomto tutoriáli. Pozri, prosím, na https://sfconservancy.org/news/2020/jun/23/gitbranchname/ a https://github.com/github/renaming pre viac detailov o tejto téme. + +{% filename %}command-line{% endfilename %} + + $ git config --global --add init.defaultBranch main + + \ No newline at end of file diff --git a/sk/deploy/pythonanywhere.md b/sk/deploy/pythonanywhere.md new file mode 100644 index 00000000000..3cba37a6aa9 --- /dev/null +++ b/sk/deploy/pythonanywhere.md @@ -0,0 +1,88 @@ +# Vytvorenie nášho blogu na PythonAnywhere + +## Vytvorenie PythonAnywhere účtu + +> **Poznámka** Možno si si už účet na PythonAnywhere vytvorila počas inštalácie - ak áno, nemusíš to robiť znova. +> +> {% include "/deploy/signup_pythonanywhere.md" %} + + +## Konfigurácia našej stránky na PythonAnywhere + +Choď naspäť do hlavného [PythonAnywhere dashboardu](https://www.pythonanywhere.com/) kliknutím na logo a vyber možnosť začať "Bash" konzolu -- to je PythonAnywhere verzia príkazového riadku, presne ako na tvojom počítači. + +![Sekcia "New Console" na webovom rozhraní PythonAnywhere s tlačítkom pre "bash"](images/pythonanywhere_bash_console.png) + +> **Poznámka** PythonAnywhere je založený na Linuxe, takže ak si vo Windowse, konzola bude vyzerať trochu inak ako v tvojom počítači. Nasadenie webovej aplikácie na PythonAnywhere zahŕňa stiahnutie kódu z GitHubu a nakonfigurovanie PythonAnywhere, aby ho rozpoznal a začal ho poskytovať ako webovú aplikáciu. Sú manuálne spôsoby, ako to urobiť, ale PythonAnywhere poskytuje pomocný nástroj, ktorý všetko urobí za teba. Najprv ho nainštalujme: + +{% filename %}PythonAnywhere command-line{% endfilename %} +``` +$ pip{{ book.pa_py_version }} install --user pythonanywhere +``` + +Malo by to zobraziť niečo ako `Collecting pythonanywhere` a nakoniec skončiť riadkom, ktorý hovorí `Successfully installed (...) pythonanywhere- (...)`. + +Teraz spustíme pomocníka, ktorý automaticky nakonfiguruje našu aplikáciu z GitHubu. Zadaj nasledujúci príkaz do konzoly na PythonAnywhere (nezabudni použiť užívateľské meno z GitHubu namiesto ``, aby sa URL zhodovala s klonovacou URL z GitHubu): + +{% filename %}PythonAnywhere command-line{% endfilename %} +``` +$ pa_autoconfigure_django.py --python={{ book.pa_py_version }} https://github.com//my-first-blog.git +``` + +Keď budeš sledovať, ako to beží, uvidíš, čo to robí: + +- Sťahuje tvoj kód z GitHubu +- Vytvára virtualenv na PythonAnywhere, presne ako na tvojom počítači +- Aktualizuje tvoj súbor settings so zopár nastaveniami špecifickými pre nasadenie +- Pripravuje databázu na PythonAnywhere pomocou príkazu `manage.py migrate` +- Nastavuje tvoje statické súbory (o tých sa dozvieme viac neskôr) +- A nastavuje PythonAnywhere, aby sprístupnil tvoju stránku cez svoju API + +Na PythonAnywhere sú všetky tieto kroky zautomatizované, ale sú to presne tie isté kroky, aké by si musela spraviť u hocijakého iného poskytovateľa serverov. + +Dôležitá vec, ktorú si treba teraz všimnúť, je, že tvoja databáza na PythonAnywhere je vlastne úplne iná a oddelená od databázy na tvojom PC - to znamená, že budeš mať iné príspevky a administrátorský účet. Preto musíme najprv inicializovať admin účet pomocou `createsuperuser`, presne ako sme to spravili na svojom vlastnom počítači. PythonAnywhere pre teba automaticky vytvoril virtualenv, takže ti stačí spustiť: + +{% filename %}PythonAnywhere command-line{% endfilename %} +``` +(ola.pythonanywhere.com) $ python manage.py createsuperuser +``` + +Zadaj detaily pre admin užívateľa. Najlepšie je použiť tie isté, ako používaš na vlastnom počítači, a predísť tak prípadnému zmäteniu neskôr, ibaže by si chcela spraviť heslo na PythonAnywhere o niečo bezpečnejšie. + +A teraz, ak chceš, sa môžeš pozrieť na svoj kód na PythonAnywhere pomocou `ls`: + +{% filename %}PythonAnywhere command-line{% endfilename %} +``` +(ola.pythonanywhere.com) $ ls +blog db.sqlite3 manage.py mysite requirements.txt static +(ola.pythonanywhere.com) $ ls blog/ +__init__.py __pycache__ admin.py apps.py migrations models.py +tests.py views.py +``` + +Môžeš tiež ísť do záložky "Files" a pohybovať sa pomocou zabudovaného PythonAnywhere prehliadača súborov. (Na stránke Console sa vieš dostať ku zvyšku stránok na PythonAnywhere pomocou tlačítka v menu v pravom hornom okraji. Keď už si na jednej z týchto stránok, linky na ostatné nájdeš hore.) + + +## Si online! + +Tvoja stránka by teraz mala byť online na internete! Preklikaj sa cez stránku "Web" na PythonAnywhere, kým sa dostaneš k odkazu na ňu. Môžeš ho poslať, komu len chceš. :) + + +> **Poznámka** Toto je začiatočnícky tutoriál a pre nasadenie stránky sme si niektoré veci zjednodušili, čo nie je ideálne z pohľadu bezpečnosti. Ak sa rozhodneš na tomto projekte ďalej stavať, mala by si si prejsť [Django deployment checklist](https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/) pre zopár tipov, ako svoju stránku zabezpečiť. + +## Debugovacie tipy + + +Ak uvídíš chybu počas behu skriptu `pa_autoconfigure_django.py`, toto sú niektoré z častých dôvodov: + +- Zabudla si si vytvoriť PythonAnywhere API token. +- Urobila si chybu vo svojej githubovej URL. +- Ak sa ti zobrazí chybové hlásenie *"Could not find your settings.py"*, pravdepodobne je to spôsobené tým, že sa ti nepodarilo pridať všetky súbory do Gitu a/alebo sa ich nepodarilo úspešne pridať na GitHub. Znovu sa pozri na odstavec o Gite vyššie +- Ak si už mala účet na PythonAnywhere a mala si problém s collectstatic, pravdepodobne máš účet so staršou verziou SQLite (napr. 3.8.2). V takom prípade si vytvor nový účet a skús príkazy v sekcii PythonAnywhere vyššie. + + +Ak pri pokuse navštíviť svoju stránku uvidíš chybu, prvým miestom, kde hľadať problém, je **error log**. Odkaz naň nájdeš na PythonAnywhere v [záložke Web](https://www.pythonanywhere.com/web_app_setup/). Pozri, či tam nie sú nejaké chybové hlášky - tie najnovšie sú naspodku. + +Môžeš skúsiť aj [všeobecné debugovacie tipy na help stránke PythonAnywhere](http://help.pythonanywhere.com/pages/DebuggingImportError). + +A nezabudni, tvoja mentorka alebo mentor sú tu na to, aby ti pomohli! diff --git a/sk/deploy/signup_pythonanywhere.md b/sk/deploy/signup_pythonanywhere.md old mode 100755 new mode 100644 index dfc6710e32f..45420d0c81d --- a/sk/deploy/signup_pythonanywhere.md +++ b/sk/deploy/signup_pythonanywhere.md @@ -1,11 +1,19 @@ -Vytvor si zdarma "Beginner" účet na PythonAnywhere: +PythonAnywhere je služba, ktorá ti umožní nechať bežať svoj kód v Pythone na serveroch v "cloude". Použijeme ju na uverejnenie našej stránky na internete. + +Náš blog uverejníme na PythonAnywhere. Vytvor si "Beginner" účet na PythonAnywhere (verzia zdarma stačí, nepotrebuješ kreditnú kartu). * [www.pythonanywhere.com](https://www.pythonanywhere.com/) -> **Poznámka** Pri výbere používateľského mena, mysli na to, že URL tvojho blogu bude v tvare `tvojeuzivatelskemeno.pythonanywhere.com`, takže si vyber prezývku alebo názov o čom tvoj blog je. +![Stránka PythonAnywhere, kde sa vytvára účet, s tlačidlom pre vytvorenie "Beginner" účtu zdarma](../deploy/images/pythonanywhere_beginner_account_button.png) + +> **Poznámka** Pri výbere používateľského mena mysli na to, že URL tvojho blogu bude v tvare `tvojeuzivatelskemeno.pythonanywhere.com`, takže si vyber prezývku alebo názov, o čom tvoj blog je. Taktiež si určite zapamätaj svoje heslo (pridaj si ho do svojho správcu hesiel, ak nejaký používaš). + +## Vytvorenie PythonAnywhere API tokenu + +Toto je niečo, čo musíš spraviť len raz. Keď si vytvoríš PythonAnywhere účet, hodí ťa to na tvoju nástenku. Nájdi odkaz na svoj účet (Account) vpravo hore: -## Vytváranie PythonAnywhere API tokenu +![Odkaz na účet (Account) vpravo hore na stránke](../deploy/images/pythonanywhere_account.png) -Toto musíš urobiť len jeden krát. Po registrácii na PythonAnywhere, budeš presmerovaná na svoju nástenku. Najdi link v hornej časti vpravo od tvojej "Accounts" stránky, a zvoľ záložku čo sa volá "API token", a stlač tlačidlo na ktorom píše "Create new API token". +následne vyber záložku "API token" a stlač tlačítko "Create new API token". -![API token záložka na Account stránke](images/pythonanywhere_create_api_token.png) \ No newline at end of file +![Záložka API token na Account stránke](../deploy/images/pythonanywhere_create_api_token.png) \ No newline at end of file diff --git a/sk/django/README.md b/sk/django/README.md old mode 100755 new mode 100644 index 6173c1f402a..28f25e210cf --- a/sk/django/README.md +++ b/sk/django/README.md @@ -1,27 +1,27 @@ # Čo je Django? -Django (*džängou*) je bezplatný a open source webový framework na vytváranie webových aplikácií, a je napísaný v Pythone. Webový framework je súbor komponentov, ktoré ti pomôžu vytvárať stránky rýchlejšie a ľahšie. +Django (*džängou*) je bezplatný open sourcový webový framework na vytváranie webových aplikácií napísaný v Pythone. Webový framework je súbor komponentov, ktoré ti pomôžu vytvárať stránky rýchlejšie a ľahšie. -Pri tvorení webových stránok, potrebuješ vždy sadu podobných komponentov: spôsob, ako riešiť autentifikáciu užívateľov (registráciu, prihlásenie, odhlásenie), kontrolný panel web stránky, formuláre, spôsob, ako nahrávať súbory, atď. +Pri tvorení webových stránok potrebuješ vždy sadu podobných komponentov: spôsob, ako riešiť autentifikáciu užívateľov a užívateliek (registráciu, prihlásenie, odhlásenie), kontrolný panel web stránky, formuláre, spôsob, ako nahrávať súbory, atď. -Našťastie si iní ľudia už dávno všimli, že weboví vývojári čelia pri tvorbe nového webu podobným problémom, takže sa spojili a vytvorili frameworky (Django je jedným z nich) a tie ti poskytujú hotové komponenty, ktoré môžeš použiť. +Našťastie si iní ľudia už dávno všimli, že webové vývojárky a vývojári čelia pri tvorbe nového webu podobným problémom, takže sa spojili a vytvorili frameworky (Django je jedným z nich), ktoré ti poskytujú hotové komponenty, ktoré môžeš použiť. -Frameworky sú tu na to, aby si nemusela znovu vynájsť koleso. Uľahčia ti tvorbu nových web stránok. +Frameworky sú tu na to, aby si nemusela znovu vynachádzať koleso. Uľahčia ti tvorbu nových web stránok. ## Prečo potrebuješ framework? -Aby sme pochopili, čo vlastne Django je, potrebujeme sa zblízka pozrieť na serveri. Prvá vec, čo o nich musíš vedieť, je, že budú obsluhovať tvoju stránku. +Aby sme pochopili, čo vlastne Django je, potrebujeme sa zblízka pozrieť na servery. Prvá vec, čo o nich musíš vedieť, je, že budú obsluhovať tvoju stránku. Predstav si poštovú schránku (port), na ktorej sa sledujú prichádzajúce listy (žiadosti). To vlastne robí web server. Web server si prečíta list a pošle odpoveď v podobe web stránky. Ale ak chceš niečo poslať, potrebuješ mať nejaký obsah. A Django je to, čo ti ten obsah pomôže vytvoriť. -## Čo sa stane, ak niekto požiada web stránku z tvojho servera? +## Čo sa stane, ak si niekto vyžiada web stránku z tvojho servera? -Keď na webový server príde žiadosť, tá je preposlaná do Djanga, ktoré sa pokúsi zistiť, čoho sa vlastne žiadosť týka. Najprv si zoberie adresu webstránky a zisťuje, čo má urobiť. Túto časť vykonáva Django **urlresolver** (všimni si, že adresa webstránku sa nazýva - Uniform Resource Locator - URL, takže názov *urlresolver* dáva zmysel). Nie je to žiadna veda - zoberie zoznam vzorov (patterns) a porovnáva ich s URL. Django overuje vzory od vrchu smerom dolu a ak nájde zhodu, pošle žiadosť príslušnej funkcii (ktorá sa nazýva *view* - pohľad). +Keď na webový server príde žiadosť, tá je preposlaná do Djanga, ktoré sa pokúsi zistiť, čoho sa vlastne žiadosť týka. Najprv si zoberie adresu webstránky a zisťuje, čo má urobiť. Túto časť vykonáva Django **urlresolver** (všimni si, že adresa webstránku sa nazýva URL (Uniform Resource Locator), takže názov *urlresolver* dáva zmysel). Nie je to žiadna veda - zoberie zoznam vzorov (patterns) a porovnáva ich s URL. Django overuje vzory od vrchu smerom dolu a ak nájde zhodu, pošle žiadosť príslušnej funkcii (ktorá sa nazýva *view*). Predstav si poštárku s listom. Kráča ulicou a porovnáva čísla domov s číslom na liste. Ak sa zhoduje, nechá tam list. Takto funguje urlresolver! -Vo funkcii *view* sa dejú všetky zaujímavé veci: môžeme sa pozrieť do databázy a vyhľadať nejaké informácie. Čo ak užívateľ požiada o zmenu v údajoch? Napríklad listom, v ktorom je žiadosť "Prosím, zmeňte popis mojej práce." *view* overí, či máš oprávnenie na túto zmenu, potom aktualizuje popis tvojej práce a naspäť pošle správu: "Hotovo!". Následne *view* vygeneruje odpoveď a Django ho pošle do uživateľovho prehliadača. +Vo funkcii *view* sa dejú všetky zaujímavé veci: môžeme sa pozrieť do databázy a vyhľadať nejaké informácie. Čo ak užívateľka požiada o zmenu v údajoch? Je to, akoby poslala list s obsahom: "Prosím, zmeňte popis mojej práce." *view* overí, či je oprávnená takú zmenu spraviť, potom popis práce zaktualizuje a naspäť pošle správu: "Hotovo!". Následne *view* vygeneruje odpoveď a Django ho pošle do prehliadača patriacemu užívateľke. -Samozrejme, vyššie uvedený popis je trochu zjednodušený, ale zatiaľ ešte nepotrebuješ vedieť všetky technické detaily. Pre všeobecnú predstavu to však stačí. +Samozrejme, vyššie uvedený popis je trochu zjednodušený, ale zatiaľ ešte nepotrebuješ vedieť všetky technické detaily. Pre všeobecnú predstavu to stačí. -Takže namiesto zložitého študovania detailov, jednoducho začneme v Djangu niečo vytvárať a všetky dôležité veci sa naučíme popri tom! \ No newline at end of file +Takže namiesto zložitého študovania detailov jednoducho začneme v Djangu niečo budovať a všetky dôležité veci sa naučíme popri tom! \ No newline at end of file diff --git a/sk/django_admin/README.md b/sk/django_admin/README.md old mode 100755 new mode 100644 index 81930e4d370..dae7a763c35 --- a/sk/django_admin/README.md +++ b/sk/django_admin/README.md @@ -1,8 +1,8 @@ # Django admin -Na pridávanie, editovanie a mazanie postov, ktoré sme práve namodelovali, budeme používať Django admina. +Na pridávanie, editovanie a mazanie príspevkov, ktoré sme práve namodelovali, budeme používať Django admina. -Otvorme súbor `blog/admin.py` a nahraďme jeho obsah týmto: +Otvorme súbor `blog/admin.py` v editore a nahraďme jeho obsah týmto: {% filename %}blog/admin.py{% endfilename %} @@ -23,7 +23,7 @@ Pre prihlásenie musíš vytvoriť *superusera* - užívateľa, ktorý má kontr > Ak chceš zadať viac príkazov, kým web server beží, otvor nové okno terminálu a aktivuj svoj virtualenv. Ako písať príkazy sme si povedali v kapitole **Tvoj prvý Django projekt!** v odstavci **Spustenie webového serveru**. -{% filename %}Mac OS X or Linux:{% endfilename %} +{% filename %}Mac OS X alebo Linux:{% endfilename %} (myvenv) ~/djangogirls$ python manage.py createsuperuser @@ -33,25 +33,25 @@ Pre prihlásenie musíš vytvoriť *superusera* - užívateľa, ktorý má kontr (myvenv) C:\Users\Name\djangogirls> python manage.py createsuperuser -Po výzve zadaj svoje meno (malé písmená, bez medzier), emailovú adresu a heslo. **Netráp sa, že nevidíš heslo ktoré zadávaš - tak to má byť.** Len ho zadaj a stlač `enter`. Výstup by mal vyzerať asi takto (kde užívateľské meno a email by mali byť tvoje vlastné): +Po výzve zadaj svoje meno (malé písmená, bez medzier), emailovú adresu a heslo. **Netráp sa, že nevidíš heslo, ktoré zadávaš, tak to má byť.** Len ho zadaj a stlač `enter`. Výstup by mal vyzerať asi takto (kde užívateľské meno a email by mali byť tvoje vlastné): - Username: admin - Email address: admin@admin.com + Username: ola + Email address: ola@example.com Password: Password (again): Superuser created successfully. -Vráť sa do prehliadača. Prihlás sa zvolenými údajmi ako superuser, mala by sa ti zobraziť nástenka (dashboard) Django admina. +Vráť sa do prehliadača. Prihlás sa zvolenými údajmi ako superuser, mala by sa ti zobraziť nástenka Django admina. ![Django admin](images/django_admin3.png) -Prejdi do Postov a trochu experimentuj. Pridaj päť či šesť blog postov. Netráp sa veľmi s obsahom - trebárs skopíruj a vlož text z tohto tutorialu, nech ušetríš čas. :) +Choď do kategórie Posts a trochu sa s ňou pohraj. Pridaj 5 alebo 6 príspevkov. Netráp sa s obsahom - je viditeľný len pre teba na tvojom lokálnom počítači - môžeš skopírovať nejaký text z tohto tutoriálu, aby si ušetrila čas. :) -Uisti sa, že aspoň dva alebo tri posty (ale nie všetky) majú nastavený dátum publikovania. Bude to neskôr užitočné. +Uisti sa, že aspoň dva alebo tri príspevky (ale nie všetky) majú nastavený dátum publikovania. Príde nám to vhod neskôr. ![Django admin](images/edit_post3.png) -Ak chceš vedieť viac o Django admine, pozri si dokumentáciu Djanga: https://docs.djangoproject.com/en/1.11/ref/contrib/admin/ +Ak chceš vedieť viac o Django admine, pozri si dokumentáciu Djanga: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/ -Teraz je asi vhodný čas dať si kávu (alebo čaj), alebo niečo pod zub a nabrať trochu energie. Práve si vytvorila svoj prvý Django model - zaslúžiš si trochu oddychu! \ No newline at end of file +Teraz je asi vhodný čas dať si kávu (alebo čaj) alebo niečo pod zub a nabrať trochu energie. Práve si vytvorila svoj prvý Django model - zaslúžiš si trochu oddychu! \ No newline at end of file diff --git a/sk/django_forms/README.md b/sk/django_forms/README.md old mode 100755 new mode 100644 index 18422bf7129..40d3a32c873 --- a/sk/django_forms/README.md +++ b/sk/django_forms/README.md @@ -1,12 +1,12 @@ -# Formuláre Django +# Django formuláre -Posledná vec, ktorú chceme urobiť na našej web stránke je vytvoriť príjemný spôsob pridávania a úpravy blog postov. Django `admin` je v pohode, ale ťažko sa prispôsobuje a upravuje do krajšej podoby. Pomocou `formulárov` budeme mať absolútnu moc nad naším rozhraním - môžeme urobiť takmer čokoľvek, čo si vieme predstaviť! +Posledná vec, ktorú chceme urobiť na našej web stránke, je vytvoriť pohodlný spôsob pridávania a úpravy blogových príspevkov. Django `admin` je v pohode, ale ťažko sa prispôsobuje a upravuje do krajšej podoby. Pomocou `formulárov` budeme mať absolútnu moc nad naším rozhraním - môžeme urobiť takmer čokoľvek, čo si vieme predstaviť! Na Django formulároch je fajn, že ich môžeme vytvoriť úplne od nuly alebo vytvoriť `ModelForm`, ktorý uloží výsledok formulára do modelu. -A toto je presne to, čo chceme urobiť: vytvoríme formulár pre náš `Post` model. +A toto je presne to, čo chceme urobiť: vytvoríme formulár pre náš model `Post`. -Tak ako všetky ostatné dôležité časti Djanga, formuláre majú svoj vlastný súbor: `forms.py`. +Tak, ako všetky ostatné dôležité časti Djanga, aj formuláre majú svoj vlastný súbor: `forms.py`. Musíme vytvoriť súbor s týmto názvom v adresári `blog`. @@ -14,7 +14,7 @@ Musíme vytvoriť súbor s týmto názvom v adresári `blog`. └── forms.py -OK, otvorme ho a napíšme nasledovný kód: +OK, otvorme ho v editore a napíšme nasledovný kód: {% filename %}blog/forms.py{% endfilename %} @@ -30,71 +30,83 @@ class PostForm(forms.ModelForm): fields = ('title', 'text',) ``` -Najskôr musíme naimportovať Django formuláre (`from django import forms`) a samozrejme aj náš `Post` model (`from .models import Post`). +Najskôr musíme naimportovať Django formuláre (`from django import forms`) a náš model `Post` (`from .models import Post`). `PostForm`, ako asi správne predpokladáš, je názov nášho formulára. Musíme Djangu povedať, že tento formulár je `ModelForm` (aby Django pre nás mohlo trochu čarovať) - za to je zodpovedný `forms.ModelForm`. Ďalej máme `triedu Meta`, kde Djangu povieme, ktorý model by mal byť použitý na vytvorenie tohto formulára (`model = Post`). -Nakoniec môžeme Djangu povedať, ktoré formuláre budú v našom formulári. V tomto scenári, chceme aby boli zobrazené iba `title` (nadpis) a `text` - `author` by mala byť aktuálne prihlásená osoba (teda ty!) a dátum vytvorenia `created_date` by mal byť automaticky nastavený pri vytvorení postu (t.j. v kóde), však? +Nakoniec môžeme Djangu povedať, ktoré polia budú v našom formulári. V tomto prípade chceme, aby boli zobrazené iba `title` (nadpisy) a `text` - `author` by mala byť aktuálne prihlásená osoba (teda ty!) a dátum vytvorenia `created_date` by mal byť automaticky nastavený pri vytvorení postu (t.j. v kóde), však? -To je všetko! Jediné, čo treba teraz urobiť, je použiť formulár v *zobrazení* (angl. view) a zobraziť ho v šablóne. +To je všetko! Jediné, čo treba teraz urobiť, je použiť formulár vo *viewe* a zobraziť ho v šablóne. Takže ešte raz vytvoríme link na stránku, URL, zobrazenie a šablónu. ## Link na stránku s formulárom -Je čas otvoriť `blog/templates/blog/base.html`. Pridáme link do `divu` s názvom `page-header`: +Predtým, než pridáme link, budeme potrebovať zopár ikoniek, ktoré použijeme ako tlačidlá pre link. V rámci tohto tutoriálu si stiahni [file-earmark-plus.svg](https://raw.githubusercontent.com/twbs/icons/main/icons/file-earmark-plus.svg) a ulož ho do priečinku `blog/templates/blog/icons/` + +> Poznámka: Pre stiahnutie SVG obrázku otvor kontextové menu k linku (väčšinou stlačením pravého tlačidla na myši) a zvoľ "Uložiť odkaz ako". V dialógu, kde si vyberáš, kde sa má súbor uložiť, sa nasmeruj do priečinku `djangogirls` svojho Django projektu a ďalej do podadresára `blog/templates/blog/icons/` a ulož súbor tam. + +Prišiel čas otvoriť `blog/templates/blog/base.html` v editore. Teraz môžeme použiť tento súbor s ikonkou do našej základnej šablóny takto. V elemente `div` vnútri `header` sekcie pridáme link pred element `h1`: {% filename %}blog/templates/blog/base.html{% endfilename %} ```html - + + {% include './icons/file-earmark-plus.svg' %} + ``` -Všimni si, že chceme zavolať naše nové view `post_new`. Trieda `"glyphicon glyphicon-plus"` je poskytnutá bootstrap témou ktorú používame a ona zobrazí znamienko plus pre nás. +Všimni si, že chceme zavolať náš nový view `post_new`. [SVG ikonku](https://icons.getbootstrap.com/icons/file-earmark-plus/) máme z [Bootstrap Icons](https://icons.getbootstrap.com/) a zobrazí sa ako ikonka stránky s pluskom. Použijeme šablónový príkaz `include`. Týmto dosiahneme, že sa obsah súboru vloží do Django šablóny. Webový prehliadač vie, ako sa s týmto typom obsahu vysporiadať, bez toho, aby bolo treba čokoľvek ďalej spracovávať. -Po pridaní riadku by tvoj html súbor mal vyzerať asi takto: +> Všetky Bootstrapové ikonky si môžeš stiahnuť [tu](https://github.com/twbs/icons/releases/download/v1.1.0/bootstrap-icons-1.1.0.zip). Súbor rozbaľ a skopíruj všetky obrázkové súbory SVG do nového adresára vo vnútri `blog/templates/blog/` s názvom `icons`. Vďaka tomuto môžeš pristupovať k ikonke ako `pencil-fill.svg` pomocou cesty `blog/templates/blog/icons/pencil-fill.svg` + +Po zmene riadku by tvoj HTML súbor mal vyzerať takto: {% filename %}blog/templates/blog/base.html{% endfilename %} ```html {% load static %} + Django Girls blog - - + - -
+ +
-
+
{% block content %} {% endblock %}
-
+
``` -Keď uložíš a obnovíš stránku http://127.0.0.1:8000 uvidíš samozrejme známu chybu `NoReverseMatch`, však? +Po uložení a obnove stránky http://127.0.0.1:8000 uvidíš našu starú známu chybu `NoReverseMatch`. Je to tak? Dobre! ## URL -Otvor `blog/urls.py` a pridaj riadok: +Otvoríme `blog/urls.py` v editore a pridáme riadok: {% 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'), ``` A výsledný kód bude vyzerať takto: @@ -102,21 +114,21 @@ A výsledný kód bude vyzerať takto: {% 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'), ] ``` -Po obnovení stránky uvidíme chybu `AttributeError`, pretože nemáme implementovaný view `post_new`. Pridajme ho teraz. +Po obnovení stránky uvidíme chybu `AttributeError`, pretože nemáme naimplementovaný view `post_new`. Pridajme ho teraz. -## view post_new +## View post_new -Teraz otvoríme súbor `blog/views.py` a pridáme tam nasledujúce riadky so zvyškom importovacích riadkov `from`: +Teraz otvoríme súbor `blog/views.py` v editore a pridáme nasledujúce riadky so zvyškom importovacích riadkov `from`: {% filename %}blog/views.py{% endfilename %} @@ -134,20 +146,20 @@ def post_new(request): return render(request, 'blog/post_edit.html', {'form': form}) ``` -Nový formulár `Post` vytvoríme tak, že sputíme `PostForm()` a prepošleme ho šablóne. K tomuto *view* sa ešte vrátime, ale teraz poďme rýchlo vytvoriť šablónu formulára. +Nový formulár pre `Post` vytvoríme tak, že zavoláme `PostForm()` a prepošleme ho šablóne. K tomuto *viewu* sa ešte vrátime, ale teraz poďme rýchlo vytvoriť šablónu formulára. ## Šablóna -Musíme vytvoriť súbor `post_edit.html` v adresári `blog/ templates/blog`. Aby formulár fungoval, potrebujeme niekoľko vecí: +Musíme vytvoriť súbor `post_edit.html` v priečinku `blog/templates/blog` a otvoriť ho v editore. Aby formulár fungoval, potrebujeme niekoľko vecí: * Musíme zobraziť formulár. Môžeme to urobiť (napríklad) pomocou {% raw %}`{{ form.as_p }}`{% endraw %}. -* Riadok vyššie musí byť obalený HTML tagom: `
...
`. +* Riadok vyššie musí byť obalený HTML elementom form: `
...
`. * Potrebujeme tlačidlo `Uložiť`. Vytvoríme ho ako HTML tlačidlo: ``. -* A nakoniec, hneď za otváracím tagom `
` musíme pridať `{% raw %}{% csrf_token %}{% endraw %}`. Toto je veľmi dôležité, vďaka tomu je formulár bezpečný! Ak si na to zabudla, Django sa bude sťažovať keď sa pokúsiš uložiť formulár: +* A nakoniec hneď za otváracím tagom `` musíme pridať `{% raw %}{% csrf_token %}{% endraw %}`. Toto je veľmi dôležité, vďaka tomu je formulár zabezpečený! Ak na to zabudneš, Django sa bude sťažovať, keď sa pokúsiš formulár uložiť: ![CSFR Zakázaná stránka](images/csrf2.png) -OK, pozrime sa, ako by malo vyzerať HTML v `post_edit.html`: +OK, poďme sa pozrieť, ako by malo vyzerať HTML v `post_edit.html`: {% filename %}blog/templates/blog/post_edit.html{% endfilename %} @@ -155,27 +167,27 @@ OK, pozrime sa, ako by malo vyzerať HTML v `post_edit.html`: {% extends 'blog/base.html' %} {% block content %} -

New post

+

New post

{% csrf_token %} {{ form.as_p }} - +
{% endblock %} ``` -Obnovíme stránku! Aha! Tvoj formulár je na svete! +Čas obnoviť stránku! Aha! Tvoj formulár je na svete! ![Nový formulár](images/new_form2.png) -Ale počkaj! Keď zadáš niečo do polí `title` a `text` a skúsiš to uložiť - čo sa stane? +Ale moment! Keď zadáš niečo do polí `title` a `text` a skúsiš to uložiť, čo sa stane? -Nič! Sme stále na rovnakej stránke a náš text je preč... a žiaden nový príspevok sa nepridal. Takže čo sa pokazilo? +Nič! Sme stále na rovnakej stránke a náš text zmizol... a žiaden nový príspevok sa nepridal. Takže čo sa pokazilo? -Odpoveď znie: nič. Akurát budeme mať ešte trochu práce v našom *view* (zobrazení). +Odpoveď znie: nič. Akurát musíme ešte trochu popracovať na našom *viewe*. ## Uloženie formuláru -Znova otvor `blog/views.py`. Momentálne máme v `post_new` len toto: +Znova otvor `blog/views.py` v editore. Momentálne máme v `post_new` len toto: {% filename %}blog/views.py{% endfilename %} @@ -185,9 +197,9 @@ def post_new(request): return render(request, 'blog/post_edit.html', {'form': form}) ``` -Keď odošleme formulár, vrátime sa do rovnakého view, ale teraz už máme v `request` aj nejaké údaje, presnejšie v `request.POST` (názov nemá nič spoločné s "postom" na blogu, ide len o to, že posielame - "postujeme" údaje). Pamätáš si, že naša definícia formuláru `
` v HTML súbore mala premennú `method="POST"`? Všetky polia z formulára sú teraz v `request.POST`. `POST` by si nemala premenovať na nič iné (jediná ďalšia platná hodnota pre premennú `method` je `GET`, teraz ale nemáme čas vysvetliť si rozdiel). +Keď odošleme formulár, vrátime sa do rovnakého viewu, ale teraz už máme v `request` aj nejaké údaje, presnejšie v `request.POST` (názov nemá nič spoločné s "postom" na blogu, ide len o to, že posielame - "postujeme" údaje). Pamätáš si, ako naša definícia formuláru `` v HTML súbore mala premennú `method="POST"`? Všetky polia z formulára sú teraz v `request.POST`. `POST` by si nemala premenovať na nič iné (jediná ďalšia platná hodnota pre premennú `method` je `GET`, teraz ale nemáme čas vysvetliť si rozdiel). -Takže v našom *view* musíme ošetriť dva rôzne prípady: prvý, ak pristupujeme na stránku prvýkrát a chceme prázdny formulár, a druhý, keď sa vrátime na *view* s už predvyplnenými údajmi formulára. Takže potrebujeme pridať podmienku (na to použijeme `if`): +Takže v našom *viewe* musíme ošetriť dva rôzne prípady: prvý, ak pristupujeme na stránku prvýkrát a chceme prázdny formulár, a druhý, keď sa vrátime na *view* s už predvyplnenými údajmi formulára. Takže potrebujeme pridať podmienku (na to použijeme `if`): {% filename %}blog/views.py{% endfilename %} @@ -198,7 +210,7 @@ else: form = PostForm() ``` -Je čas nahradiť tri bodky `[...]`. Ak ide o `metódu` `POST` tak cheme vytvoriť `PostForm` s datami z formulára, však? Urobíme to takto: +Je čas nahradiť tri bodky `[...]`. Ak ide o `metódu` `POST`, tak chceme vytvoriť `PostForm` s dátami z formulára, však? Urobíme to takto: {% filename %}blog/views.py{% endfilename %} @@ -206,9 +218,9 @@ Je čas nahradiť tri bodky `[...]`. Ak ide o `metódu` `POST` tak cheme vytvori form = PostForm(request.POST) ``` -Ďalej skontrolujme či je formulár v poriadku (všetky povinné polia sú vyplnené a nie sú zadané žiadne nesprávne hodnoty). To urobíme pomocou `form.is_valid()`. +Ďalej skontrolujeme, či je formulár v poriadku (všetky povinné polia sú vyplnené a nie sú zadané žiadne nesprávne hodnoty). To urobíme pomocou `form.is_valid()`. -Skonotrolujeme, či je formulár platný a ak áno, môžeme ho uložiť! +Skontrolujeme, či je formulár platný a ak áno, môžeme ho uložiť! {% filename %}blog/views.py{% endfilename %} @@ -220,9 +232,9 @@ if form.is_valid(): post.save() ``` -V podstate urobím dve veci: uložíme formulár pomocou `form.save` a pridáme autora (keďže pole `author` nebolo v `PostForm`, avšak toto pole je povinné). `commit=False` znamená, že ešte nechceme uložiť model `Post` - najskôr chceme pridať autora. Väčšinou budeš používať `form.save()` bez `commit=False`, no v tomto prípade, to takto musíme spraviť. `post.save()` uchová zmeny (pridanie autora) a máme vytvorený nový blog príspevok! +V podstate tu ide o dve veci: uložíme formulár pomocou `form.save` a pridáme autora (keďže pole `author` nebolo v `PostForm`, avšak toto pole je povinné). `commit=False` znamená, že ešte nechceme uložiť model `Post` - najskôr chceme pridať autora. Väčšinou budeš používať `form.save()` bez `commit=False`, no v tomto prípade to musíme tak spraviť. `post.save()` uchová zmeny (pridanie autora) a máme vytvorený nový blogový príspevok! -A bolo by skvelé, keby sme sa potom ihneď dostali na stránku `post_detail` nášho novovytvoreného blog postu, nie? Aby sme to vedeli urobiť, budeme potrebovať ešte jeden import: +A nakoniec by bolo super, keby sme mohli ísť rovno na stránku `post_detail` pre náš novovytvorený príspevok, nie? K tomu potrebujeme ešte jeden import: {% filename %}blog/views.py{% endfilename %} @@ -230,7 +242,7 @@ A bolo by skvelé, keby sme sa potom ihneď dostali na stránku `post_detail` n from django.shortcuts import redirect ``` -Pridaj tento riadok úplne na začiatok súboru. A teraz môžeme povedať: prejdi na stránku `post_detail` novovytvoreného príspevku": +Pridaj tento riadok úplne na začiatok súboru. A teraz môžeme povedať: "prejdi na stránku `post_detail` novovytvoreného príspevku": {% filename %}blog/views.py{% endfilename %} @@ -238,9 +250,9 @@ Pridaj tento riadok úplne na začiatok súboru. A teraz môžeme povedať: prej return redirect('post_detail', pk=post.pk) ``` -`blog. views. post_detail` je názov view, kam chceme ísť. Spomínaš si, že tento *view* vyžaduje premennú `pk`? Aby sme ju odovzdali do view, použijeme `pk=post.pk`, kde `post` je novovytvorený blog post! +`post_detail` je názov viewu, na ktorý chceme ísť. Spomínaš si, že tento *view* vyžaduje premennú `pk`? Aby sme ju odovzdali viewu, použijeme `pk=post.pk`, kde `post` je náš novovytvorený príspevok! -OK, dosť sme hovorili, už je na čase pozrieť sa ako teraz vyzerá celý *view*, však? +OK, dosť bolo rečí, už je načase pozrieť sa, ako teraz vyzerá celý *view*, však? {% filename %}blog/views.py{% endfilename %} @@ -259,39 +271,45 @@ def post_new(request): return render(request, 'blog/post_edit.html', {'form': form}) ``` -Pozrime sa, či funguje. Poď na stránku http://127.0.0.1:8000/post/new/, pridaj `title` a `text`, ulož to... a voilà! Nový blog post je pridaný a my sme presmerovaní na stránku `post_detail`! +Pozrime sa, či to funguje. Poď na stránku http://127.0.0.1:8000/post/new/, pridaj `title` a `text`, ulož to... a voilà! Nový príspevok je pridaný a my sme presmerovaní na stránku `post_detail`! -Možno si si všimla, že pred uložením postu nastavujeme dátum publikovania. Neskôr v **Django Girls Tutorial: Rozšírenie** sa zoznámime s *tlačidlom Publikovať*. +Možno si si všimla, že pred uložením príspevku nastavujeme dátum publikovania. Neskôr v **DjangoGirls Tutorial: Rozšírenie** sa zoznámime s *tlačidlom Publikovať*. To je úžasné! -> Keďže sme nedávno použili administrátorské rozhranie Djanga, systém si myslí, že sme stále prihlásení. Existuje zopár situácií, ktoré by mohli spôsobiť odhlásenie (zatvorenie prehliadača, reštart databázy a podobne). Pokiaľ by sa ti zobrazovala chyba pri vytváraní postu upozorňujúca na neprihláseného užívateľa, choď na adminskú stránku http://127.0.0.1:8000/admin and prihlás sa znova. Toto dočasne vyrieši problém. Čaká však na teba aj permanentné riešenie v kapitole **Domáca úloha: zvýš svojej stránke bezpečnosť!** po skončení hlavného tutorialu. +> Keďže sme nedávno použili administrátorské rozhranie Djanga, systém si myslí, že sme stále prihlásení. Existuje zopár situácií, ktoré by mohli spôsobiť odhlásenie (zatvorenie prehliadača, reštart databázy a podobne). Pokiaľ by sa ti zobrazovala chyba pri vytváraní postu, ktorá by sa sťažovala, že nie si prihlásená, choď na adminskú stránku http://127.0.0.1:8000/admin and prihlás sa znova. Toto problém dočasne vyrieši. Čaká však na teba aj permanentné riešenie v kapitole **Domáca úloha: zvýš svojej stránke bezpečnosť!** po skončení hlavného tutoriálu. ![Chyba prihlásenia](images/post_create_error.png) ## Validácia formuláru -Teraz si ukážeme, aké sú Django formuláre super. Príspevok na blogu (post) musí mať polia `title` a `text`. V našom modeli `Post` sme nepovedali (na rozdiel od `published_date`), že tieto polia sú nepovinné, takže Django štandardne očakáva, že budú nastavené. +Teraz si ukážeme, aké sú Django formuláre super. Príspevok na blogu musí mať polia `title` a `text`. V našom modeli `Post` sme nepovedali (na rozdiel od `published_date`), že tieto polia sú nepovinné, takže Django štandardne očakáva, že budú nastavené. Skús uložiť formulár bez `title` a `text`. Pokús sa uhádnuť, čo sa stane! ![Validácia formuláru](images/form_validation2.png) -Django overí, či sú všetky polia formulára správne. Nie je to skvelé? +Django sa postará o to, aby overilo, či sú všetky polia formulára správne. Nie je to skvelé? -## Úprava formuláru +## Formulár pre úpravu -Teraz už vieme, ako sa pridáva nový formulár. Ale čo ak chceme upravovať existujúci? Je to veľmi podobné tomu, čo sme práve spravili. Poďme rýchlo vytvoriť niektoré dôležité veci. (ak niečomu nerozumieš, opýtaj sa svojho trénera alebo sa pozri na predchádzajúce kapitoly, pretože všetky tieto kroky sme si už prebrali.) +Teraz už vieme, ako sa pridáva nový príspevok. Ale čo ak chceme upraviť existujúci? Je to veľmi podobné tomu, čo sme práve spravili. Poďme rýchlo vytvoriť niekoľko dôležitých vecí. (Ak niečomu nerozumieš, opýtaj sa svojej mentorky alebo mentora alebo sa pozri na predchádzajúce kapitoly, pretože všetky tieto kroky sme si už prebrali.) -Otvor `blog/templates/blog/post_detail.html` a pridaj tento riadok +V prvom rade si uložíme ikonku, ktorá bude reprezentovať tlačidlo na úpravu. Stiahni si [pencil-fill.svg](https://raw.githubusercontent.com/twbs/icons/main/icons/pencil-fill.svg) a ulož ho do adresára `blog/templates/blog/icons/`. + +Otvor si `blog/templates/blog/post_detail.html` v editore a pridaj nasledujúci kód dovnútra elementu `article`: {% filename %}blog/templates/blog/post_detail.html{% endfilename %} ```html - + ``` -takže šablóna teraz bude vyzerať takto: +aby šablóna vyzerala takto: {% filename %}blog/templates/blog/post_detail.html{% endfilename %} @@ -299,30 +317,34 @@ takže šablóna teraz bude vyzerať takto: {% extends 'blog/base.html' %} {% block content %} -
+
+ {% endblock %} ``` -V `blog/urls.py` pridáme tento riadok: +Otvor si `blog/urls.py` v editore a pridaj tento riadok: {% 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'), ``` -Znova použijeme šablónu `blog/templates/blog/post_edit.html`, takže posledná vec, čo nám chýba je *view*. +Znova použijeme šablónu `blog/templates/blog/post_edit.html`, takže posledná vec, čo nám chýba, je *view*. -Otvor `blog/views.py` a na úplný koniec súboru pridaj toto: +Otvor `blog/views.py` v editore a na úplný koniec súboru pridaj toto: {% filename %}blog/views.py{% endfilename %} @@ -342,7 +364,7 @@ def post_edit(request, pk): return render(request, 'blog/post_edit.html', {'form': form}) ``` -To vyzerá skoro tak isto ako náš view `post_new`, však? Ale nie úplne. Po prvé: odovzdávame navyše parameter `pk` z URL. A ďalej: pomocou `get_object_or_404(Post, pk=pk)` získame `Post` model, ktorý chceme upravovať a následne pri vytváraní formuláru odovzdáme tento post ako parameter `instance`, aj v prípade keď ukladáme formulár… +To vyzerá skoro tak isto ako náš view `post_new`, však? Ale nie úplne. Jeden rozdiel je, že posielame navyše parameter `pk` z `urls`. A ďalej: pomocou `get_object_or_404(Post, pk=pk)` získame model `Post`, ktorý chceme upravovať, a následne pri vytváraní formuláru odovzdáme tento príspevok ako parameter `instance`, aj v prípade, keď ukladáme formulár… {% filename %}blog/views.py{% endfilename %} @@ -350,7 +372,7 @@ To vyzerá skoro tak isto ako náš view `post_new`, však? Ale nie úplne. Po p form = PostForm(request.POST, instance=post) ``` -…aj v prípade keď sme otvorili formulár za účelom úpravy daného príspevku: +…aj v prípade, keď sme otvorili formulár za účelom úpravy daného príspevku: {% filename %}blog/views.py{% endfilename %} @@ -362,7 +384,7 @@ OK, vyskúšajme, či to funguje! Poďme na stránku `post_detail`. V pravom hor ![Tlačidlo Upraviť](images/edit_button2.png) -Keď naňho klikneš, uvidíš formulár s našim blog príspevkom: +Keď naňho klikneš, uvidíš formulár s našim blogovým príspevkom: ![Úprava formuláru](images/edit_form2.png) @@ -370,40 +392,46 @@ Môžeš si vyskúšať zmeniť názov alebo text a uložiť zmeny! Gratulujeme! Tvoja aplikácia je čím ďalej dokonalejšia! -Ak potrebuješ viac informácií o Django formulároch, prečítaj si dokumentáciu: https://docs.djangoproject.com/en/1.11/topics/forms/ +Ak potrebuješ viac informácií o Django formulároch, prečítaj si dokumentáciu: https://docs.djangoproject.com/en/3.2/topics/forms/ ## Bezpečnosť -Možnosť vytvárať nové príspevky len kliknutím na link je úžasná! Ale, v tejto chvíli, každý kto navštívi tvoju stránku, bude môcť pridať nový blog post a to asi nie je to, čo by si chcela. Urobme to tak, že sa tlačidlo zobrazí len tebe. +Možnosť vytvárať nové príspevky len kliknutím na link je super! Ale v tomto momente každý, kto navštívi tvoju stránku, bude môcť pridať nový blog post, a to asi nie je to, čo by si chcela. Zmeňme to tak, že tlačidlo sa zobrazí iba tebe a nikomu inému. -V `blog/templates/blog/base.html` nájdi náš `div` `page-header` a kotviaci tag, ktorý si tam umiestnila už predtým. Mal by vyzerať takto: +Otvor `blog/templates/blog/base.html` v editore a nájdi náš `div` vovnútri `header` a tag "a", ktorý si tam umiestnila už predtým. Mal by vyzerať takto: {% filename %}blog/templates/blog/base.html{% endfilename %} ```html - + + {% include './icons/file-earmark-plus.svg' %} + ``` -Do neho pridáme ďalší tag `{% if %}`, vďaka ktorému sa link zobrazí len užívateľom, ktorí sú prihlásení ako admin. Momentálne si to len ty! Zmeň `` aby vyzeral takto: +Do tejto časti pridáme ďalší tag `{% if %}`, vďaka ktorému sa link zobrazí len užívateľovi alebo užívateľke, ktorí sú prihlasení do admina. Momentálne si to len ty! Zmeň element ``, aby vyzeral takto: {% filename %}blog/templates/blog/base.html{% endfilename %} ```html {% if user.is_authenticated %} - + + {% include './icons/file-earmark-plus.svg' %} + {% endif %} ``` -Tento `{% if %}` zabezpečí, aby bol link odoslaný do prehliadača, len ak je používateľ požadujúci stránku prihlásený. Nezabráni to vytváraniu nových príspevkov úplne, ale je to dobrý prvý krok. Viac o bezpečnosti si povieme v rozširujúcich lekciách. +Tento `{% if %}` spôsobí, že link bude odoslaný do prehliadača len v prípade, ak je používateľka či používateľ požadujúci stránku prihlásená/-ý. Nezabráni to vytváraniu nových príspevkov úplne, ale ako prvý krok je to dobré. Viac o bezpečnosti si povieme v rozširujúcich lekciách. -Spomínaš si na ikonku na upravovanie ktorú sme práve pridali na našu stránku s detailmi? Rovnakú zmenu chceme pridať aj sem, aby iný ludia nemohli upravovať existujúce príspevky. +Spomínaš si na ikonku na upravovanie, ktorú sme práve pridali na našu stránku s detailmi? Rovnakú zmenu chceme pridať aj sem, aby iní ludia nemohli upravovať existujúce príspevky. -Otvor `blog/templates/blog/post_detail.html` a pridaj tento riadok: +Otvor `blog/templates/blog/post_detail.html` v editore a nájdi tento riadok: {% filename %}blog/templates/blog/post_detail.html{% endfilename %} ```html - + + {% include './icons/pencil-fill.svg' %} + ``` Zmeň ho na toto: @@ -412,38 +440,40 @@ Zmeň ho na toto: ```html {% if user.is_authenticated %} - + + {% include './icons/pencil-fill.svg' %} + {% endif %} ``` -Kedže si pravdepodobne prihlásená, ak obnovíš stránku, neuvidíš nič. Načítaj stránku v inom prehliadači, alebo incognito okne (nazývané "InPrivate" vo Windows Edge) a uvidíš, že sa odkaz nezobrazuje a ikonka tiež nie! +Kedže si pravdepodobne prihlásená, ak obnovíš stránku, neuvidíš nič nové. Načítaj stránku v inom prehliadači alebo incognito okne (nazývané "InPrivate" vo Windows Edge) a uvidíš, že odkaz sa nezobrazuje a ikonka tiež nie! ## Ešte jedna vec: čas nasadiť aplikáciu! Pozrime sa, či to všetko funguje na PythonAnywhere. Je čas na ďalšie nasadenie! -* Najprv ulož (commit) svoj nový kód a pošli ho na GitHub: +* Najprv commitni svoj nový kód a pošli ho na GitHub: {% filename %}command-line{% endfilename %} $ git status - $ git add --all . + $ git add . $ git status - $ git commit -m "Added views to create/edit blog post inside the site." + $ git commit -m "Pridane viewy na vytvorenie/editovanie prispevkov priamo zo stranky" $ git push * Potom v [konzole PythonAnywhere](https://www.pythonanywhere.com/consoles/): -{% filename %}command-line{% endfilename %} +{% filename %}PythonAnywhere command-line{% endfilename %} - $ cd ~/.pythonanywhere.com + $ cd ~/.pythonanywhere.com $ git pull [...] -(Nezabudni nahradiť `` svojím uživateľským menom na PythonAnywhere, bez hranatých zátvoriek). +(Nezabudni nahradiť `` svojou subdoménou na PythonAnywhere bez špicatých zátvoriek.) -* A nakoniec preskoč na [kartu Web](https://www.pythonanywhere.com/web_app_setup/) and klinki na **Reload**. +* A nakoniec prejdi na stránku ["Web"](https://www.pythonanywhere.com/web_app_setup/) (použi tlačidlo menu v pravej hornej časti konzoly) a stlač **Reload**. Obnov svoj blog na https://subdomena.pythonanywhere.com, aby si videla svoje zmeny. -A to by malo byť všetko! Gratulujeme :) \ No newline at end of file +A to by malo byť všetko! Gratulujeme! :) \ No newline at end of file diff --git a/sk/django_installation/README.md b/sk/django_installation/README.md old mode 100755 new mode 100644 index 53e2319d570..ae3f6452cbe --- a/sk/django_installation/README.md +++ b/sk/django_installation/README.md @@ -1,7 +1,7 @@ -# Inštalácia Django +# Inštalácia Djanga -> **Poznámka:** Ak používate Chromebook, preskočte túto kapitolu a postupujte podľa pokynov na [nastavenie Chromebooku](../chromebook_setup/README.md). +> **Poznámka** Ak používaš Chromebook, preskoč túto kapitolu a postupuj podľa pokynov na [nastavenie Chromebooku](../chromebook_setup/README.md). > -> **Poznámka** Ak si už prešla krokmi Inštalácie, tak toto už máš hotové a môžeš ísť rovno na ďalšiu kapitolu! +> **Poznámka** Ak si už prešla [inštalačnými pokynmi](../installation/README.md), tak toto už máš hotové a môžeš ísť rovno na ďalšiu kapitolu! {% include "/django_installation/instructions.md" %} \ No newline at end of file diff --git a/sk/django_installation/instructions.md b/sk/django_installation/instructions.md old mode 100755 new mode 100644 index 09cb6852e55..78ca0596849 --- a/sk/django_installation/instructions.md +++ b/sk/django_installation/instructions.md @@ -1,18 +1,18 @@ -> Časť tejto kapitoly je založené na tutorialoch Geek Girls Carrots (https://github.com/ggcarrots/django-carrots). +> Časť tejto kapitoly je založená na tutoriáloch Geek Girls Carrots (https://github.com/ggcarrots/django-carrots). > -> Časť tejto kapitoly je založená na [django-marcador tutorial](http://django-marcador.keimlink.de/) licencovanej pod medzinárodnou licenciou Creative Commons Attribution-ShareAlike 4.0. Tutoriál django-marcador je autorsky chránený Markusom Zapke-Gründemannom et al. +> Časť tejto kapitoly je založená na [django-marcador tutorial](http://django-marcador.keimlink.de/) pod licenciou Creative Commons Attribution-ShareAlike 4.0 International License. Tutoriál django-marcador je autorsky chránený Markusom Zapke-Gründemannom et al. ## Virtuálne prostredie -Skôr ako nainštalujeme Django, nainštalujeme si extrémne užitočný nástroj, ktorý ti pomôže udržiavať poriadok pri programovaní na tvojom počítači. Je možné tento krok preskočiť, no veľmi ho odporúčame. Začať s najlepším možným nastavením ti ušetrí kopec problémov v budúcnosti! +Skôr, ako nainštalujeme Django, nainštalujeme si extrémne užitočný nástroj, ktorý ti pomôže udržiavať poriadok pri programovaní na tvojom počítači. Je možné tento krok preskočiť, no veľmi ho odporúčame. Začať s najlepším možným nastavením ti ušetrí kopec problémov v budúcnosti! -Takže poďme vytvoriť **virtuálne prostredie** (alebo aj *virtualenv*). Virtualenv oddelí nastavenia Python/Django pre každý projekt zvlášť. To znamená, že zmeny, ktoré urobíš na jednej web stránke, neovplyvnia iné stránky, ktoré vyvíjaš. Šikovné, však? +Takže poďme vytvoriť **virtuálne prostredie** (alebo aj *virtualenv*). Virtualenv oddelí nastavenia Pythonu/Djanga pre každý projekt zvlášť. To znamená, že zmeny, ktoré urobíš na jednej web stránke, neovplyvnia iné stránky, ktoré vyvíjaš. Šikovné, však? -Jediné, čo musíš urobiť je nájsť adresár, v ktorom chceš `virtualenv` vytvoriť, napríklad tvoj domovský adresár. Vo Windowse by mohol vyzerať napríklad `C:\Users\Meno` (kde `Meno` predstavuje tvoj login). +Jediné, čo musíš urobiť, je nájsť priečinok, v ktorom chceš `virtualenv` vytvoriť, napríklad tvoj domovský priečinok. Vo Windowse by mohol vyzerať napríklad `C:\Users\Meno` (kde `Meno` predstavuje tvoj login). -> **POZNÁMKA:** Vo Windowse, sa uisti, že tento adresár neobsahuje špeciálne znaky, alebo znaky s diakritikou; ak tvoje uživateľské meno obsahuje znaky s diakritikou, použi iný adresár, napr. `C:\djangogirls`. +> **POZNÁMKA:** Vo Windowse sa uisti, že tento priečinok neobsahuje špeciálne znaky alebo znaky s diakritikou; ak tvoje uživateľské meno obsahuje znaky s diakritikou, použi iný priečinok, napr. `C:\djangogirls`. -V tomto tutoriale budeme používať nový adresár `djangogirls` v tvojom domovskom adresári: +V tomto tutoriáli budeme používať nový priečinok `djangogirls` v tvojom domovskom priečinku: {% filename %}command-line{% endfilename %} @@ -30,36 +30,36 @@ Vytvoríme virtualenv s názvom `myenv`. Všeobecný príkaz má takýto formát -Ak chceš vytvoriť nové `virtualenv`, musíš otvoriť príkazový riadok a spustiť `python -m venv myvenv`. Bude to vyzerať takto: +Ak chceš vytvoriť nový `virtualenv`, musíš otvoriť príkazový riadok a spustiť `python -m venv myvenv`. Bude to vyzerať takto: {% filename %}command-line{% endfilename %} C:\Users\Name\djangogirls> python -m venv myvenv -`myvenv` je názov tvojho `virtualenv`-u. Môžeš použiť aj iný názov, ale používaj malé písmená a žiadne medzery, diakritiku alebo špeciálne znaky. Je tiež dorbé použiť krátky názov, pretože naň budeš často odkazovať! +`myvenv` je názov tvojho `virtualenvu`. Môžeš použiť aj iný názov, ale používaj malé písmená a žiadne medzery, diakritiku alebo špeciálne znaky. Je tiež dobré použiť krátky názov - budeš naň často odkazovať! -Vytvoriť `virtualenv` na Linuxe a OS X vyžaduje iba jednoduché spustenie `python3 -m venv myvenv`. Bude to vyzerať takto: +Vytvoriť `virtualenv` na Linuxe a OS X vyžaduje spustenie `python3 -m venv myvenv`. Bude to vyzerať takto: {% filename %}command-line{% endfilename %} $ python3 -m venv myvenv -`myvenv` je názov tvojho `virtualenv`-u. Môžeš použiť aj iný názov, ale ostaň pri malých písmenách a nepoužívaj medzery. Je tiež dorbé použiť krátky názov, pretože naň budeš často odkazovať! +`myvenv` je názov tvojho `virtualenvu`. Môžeš použiť aj iný názov, ale ostaň pri malých písmenách a nepoužívaj medzery. Je tiež dobré použiť krátky názov, pretože naň budeš často odkazovať! -> **POZNÁMKA:** Niektoréverzie systému Debian/Ubuntu môžu zobraziť nasledujúcu chybu: +> **POZNÁMKA:** Niektoré verzie systému Debian/Ubuntu môžu zobraziť nasledujúcu chybu: > > {% filename %}command-line{% endfilename %} > -> The virtual environment was not created successfully because ensurepip is not available. On Debian/Ubuntu systems, you need to install the python3-venv package using the following command. +> The virtual environment was not created successfully because ensurepip is not available. Na systémoch Debian/Ubuntu budeš musieť nainštalovať balíček python3-venv pomocou nasledujúceho príkazu. > apt install python3-venv -> You may need to use sudo with that command. After installing the python3-venv package, recreate your virtual environment. +> Možno budeš musieť pre tento príkaz použiť sudo. Po nainštalovaní balíčku python3-venv si znova vytvor svoje virtuálne prostredie. > > > V tomto prípade postupuj podľa pokynov uvedených vyššie a nainštaluj si balík `python3-venv`: {% filename %}command-line{% endfilename %} @@ -74,15 +74,15 @@ Vytvoriť `virtualenv` na Linuxe a OS X vyžaduje iba jednoduché spustenie `pyt > Error: Command '['/home/eddie/Slask/tmp/venv/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1 > > -> Obídeme to týmto príkazom `virtualenv`-u. +> Obídeme to príkazom `virtualenv`. > > {% filename %}command-line{% endfilename %} > > $ sudo apt install python-virtualenv -> $ virtualenv --python=python3.6 myvenv +> $ virtualenv --python=python{{ book.py_version }} myvenv > > -> **POZNÁMKA:** Ak sa ti objaví chybu ako +> **POZNÁMKA:** Ak sa ti objaví chyba ako > > {% filename %}command-line{% endfilename %} > @@ -93,14 +93,14 @@ Vytvoriť `virtualenv` na Linuxe a OS X vyžaduje iba jednoduché spustenie `pyt > > {% filename %}command-line{% endfilename %} > -> sudo apt install python3.6-venv +> sudo apt install python{{ book.py_version }}-venv > -## Práca s virtualenv +## Práca s virtualenvom -Vyššie uvedený príkaz vytvorí adresár s názvom `myvenv` (alebo akékoľvek meno si vybrala), ktorý obsahuje naše virtuálne prostredie (v podstate kopec adresárov a súborov). +Vyššie uvedený príkaz vytvorí priečinok s názvom `myvenv` (alebo akékoľvek meno si si vybrala), ktorý obsahuje naše virtuálne prostredie (v podstate kopec priečinkov a súborov). @@ -112,7 +112,7 @@ Virtuálne prostredie spusti príkazom: C:\Users\Meno\djangogirls> myvenv\Scripts\activate -> **Poznámka:** Vo Windows 10 sa môže vyskytnúť chyba vo Windows PowerShell, ktorá hovorí `execution of scripts is disabled on this system`. V tomto prípade, otvor ďalší Windows PowerShell s možnosťou "Spustiť ako správca". Potom skús spustiť nasledovný príkaz predtým ako aktivuj svoje virtualenv: +> **POZNÁMKA:** Vo Windowse 10 sa môže vyskytnúť chyba vo Windows PowerShelli, ktorá hovorí `execution of scripts is disabled on this system`. V tomto prípade otvor ďalší Windows PowerShell s možnosťou "Spustiť ako správca". Potom skús spustiť nasledovný príkaz predtým, než spustíš svoj virtualenv: > > {% filename %}command-line{% endfilename %} > @@ -121,6 +121,15 @@ Virtuálne prostredie spusti príkazom: > The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the security risks described in the about_Execution_Policies help topic at http://go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy? [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "N"): A > + + +> **POZNÁMKA:** Pre používateľky populárneho editora VS Code, ktorý má vlastný zabudovaný terminál založený na Windows PowerShell: ak chcete naďalej používať tento zabudovaný terminál, môžete spustiť nasledovný príkaz na aktiváciu virtuálneho prostredia: +> +> $ . myvenv\Scripts\activate.ps1 +> +> +> Výhoda je, že netreba skákať medzi oknami editoru a príkazovými oknami. + -To, že je `virtualenv` spustený, zistíš, keď bude príkazový riadok v konzole bude mať na začiatku `(myenv)`. +To, že je `virtualenv` spustený, zistíš tak, že príkazový riadok v konzole bude mať na začiatku `(myenv)`. Pri práci vo virtuálnom prostredí bude `python` automaticky odkazovať na správnu verziu, takže môžeš pokojne používať `python` namiesto `python3`. OK, všetko potrebné máme prichystané. Konečne môžeme nainštalovať Django! -## Inštalácia Djanga +## Inštalácia Djanga {#django} -Teraz keď máš `virtualenv` spustené, môžeš nainštalovať Django. +Teraz, keď máš svoj `virtualenv` spustený, môžeš nainštalovať Django. -Predtým ako to urobíme, mali by sme sa uistiť, že je nainštalovaná najnovšia verzia `pip`, softvéru ktorý použijeme na inštalovanie Djanga: +Predtým, než to urobíme, mali by sme sa uistiť, že je nainštalovaná najnovšia verzia `pipu`, softvéru, ktorý použijeme na inštalovanie Djanga: {% filename %}command-line{% endfilename %} - (myvenv) ~$ python3 -m pip install --upgrade pip + (myvenv) ~$ python -m pip install --upgrade pip + + +### Inštalácia balíčkov so závislosťami + +Súbor requirements udržiava zoznam závislostí, ktoré sa nainštalujú, keď spustíš `pip install`: + +Ako prvé vytvor súbor s názvom `requirements.txt` vo vnútri tvojho priečinku `djangogirls/` pomocou editora, ktorý si si nainštalovala. V editore treba otvoriť nový súbor a uložiť ho ako `requirements.txt` v priečinku `djangogirls/`. Tvoj priečinok bude vyzerať takto: + + djangogirls + ├── myvenv + │ └── ... + └───requirements.txt + + +Do súboru `djangogirls/requirements.txt` by si mala pridať nasledujúci text: + +{% filename %}djangogirls/requirements.txt{% endfilename %} + + Django~={{ book.django_version }} -Potom spusti `pip install django~=1.11.0` (všimni si že používame tildu po ktorej nasleduje znamienko rovná sa: `~=`) aby si nainštalovala Django. +Teraz spusti `pip install -r requirements.txt`, aby si nainštalovala 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.9MB) + Installing collected packages: Django + Successfully installed Django-{{ book.django_version }} -> Ak sa objaví chyba pri spustení pip vo Windowse, skontroluj, či cesta/názov tvojho projektu neobsahuje medzery, diakritiku alebo špeciálne znaky (napr. `C:\Users\Tvoje Meno\djangogirls`). Ak obsahuje, mala by si zvážiť použitie iného miesta, bez medzier, diakritiky a špeciálnych znakov (napríklad: `C:\djangogirls`). Vytvor nové virtualenv v novom adresári, potom odstráň starý a zopakuj vyššie uvedený príkaz. (Presunutie virtualenv adresára nebude fungovať, lebo virtualenv používa absolútne cesty.) +> Ak sa objaví chyba pri spustení pipu vo Windowse, skontroluj, či cesta/názov tvojho projektu neobsahuje medzery, diakritiku alebo špeciálne znaky (napr. `C:\Users\Tvoje Meno\djangogirls`). Ak obsahuje, mala by si zvážiť použitie iného miesta, bez medzier, diakritiky a špeciálnych znakov (napríklad: `C:\djangogirls`). Vytvor nový virtualenv v tomto novom priečinku, potom odstráň starý a zopakuj vyššie uvedený príkaz. (Presunutie virtualenv priečinku samotného nebude fungovať, lebo virtualenv používa absolútne cesty.) -> Príkazový riadok sa možno zamrazí po tom čo sa pokúsiš nainštalovať Django. Ak sa to stane, namiesto hore uvedeného príkazu použi: +> Príkazový riadok môže zamrznúť, keď sa pokúsiš nainštalovať Django. Ak sa to stane, namiesto hore uvedeného príkazu použi: > > {% 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 > @@ -194,7 +222,7 @@ data-collapse=true ces--> -> Ak sa objaví chyba pri spustejní pip v Ubuntu 12.04 spusti `python -m pip install - U --force-reinstall pip`, čím sa opraví inštalácia pip vo virtualenv-e. +> Ak sa objaví chyba pri spustení pipu v Ubuntu 12.04, spusti `python -m pip install - U --force-reinstall pip`, čím sa opraví inštalácia pipu vo virtualenve. diff --git a/sk/django_models/README.md b/sk/django_models/README.md old mode 100755 new mode 100644 index 2be143e1b6a..fa58b18377e --- a/sk/django_models/README.md +++ b/sk/django_models/README.md @@ -1,25 +1,25 @@ # Django modely -Teraz pôjdeme vytvoriť niečo, čo bude uchovávať naše príspevky v blogu. Aby sme to vedeli spraviť, musíme si najskôr povedať niečo o `objektoch`. +Teraz pôjdeme vytvoriť niečo, čo bude uchovávať naše blogové príspevky. Aby sme to vedeli spraviť, musíme si najskôr povedať niečo o `objektoch`. ## Objekty -V programovaní sa používa pojem `objektovo orientované programovanie`. Myšlienka spočíva v tom, že namiesto vypisovania nudných sekvencií programátorských príkazov môžeme veci modelovať a definovať ako majú navzájom komunikovať. +V programovaní sa používa pojem `objektovo orientované programovanie`. Myšlienka spočíva v tom, že namiesto vypisovania nudných sekvencií programátorských príkazov môžeme veci modelovať a definovať, ako majú navzájom komunikovať. -Takže čo je to objekt? Je to zbierka vlastností a akcií. Znie to čudne, ale ukážeme si príklad. +Takže, čo je to objekt? Je to zbierka vlastností a akcií. Znie to čudne, ale ukážeme si príklad. -Ak chceme namodelovať mačku, vytvoríme objekt `Macka`, ktorá má nejaké vlastnosti, napríklad: `farba`, `vek`, `nalada` (t. j. dobrá, zlá, ospalá ;)), a `majitel` (ktorý je objektom `Osoba` alebo možno v prípade túlavej mačky bude táto vlastnosť prázdna). +Ak chceme namodelovať mačku, vytvoríme objekt `Macka`, ktorá má nejaké vlastnosti, napríklad: `farba`, `vek`, `nalada` (t. j. dobrá, zlá, ospalá ;)), a `majitelka` (ktorý je objektom `Osoba`, alebo možno v prípade túlavej mačky bude táto vlastnosť prázdna). -Ďalej má `Macka` niekoľko akcií: `priast`, `skrabat` alebo `krmit` (v ktorej dáme mačke nejaké `MacacieZradlo`, ktoré by mohlo byť samostatným objektom s vlastnosťami, t. j. `chut`). +Ďalej má `Macka` niekoľko akcií: `priast`, `skriabat` alebo `krmit` (v ktorej dáme mačke nejaké `MacacieZradlo`, ktoré by mohlo byť samostatným objektom s vlastnosťami, napr. `chut`). Macka -------- farba vek nalada - majitel + majitelka priast() - skrabat() + skriabat() krmit(mac_zradlo) @@ -33,13 +33,13 @@ Ak chceme namodelovať mačku, vytvoríme objekt `Macka`, ktorá má nejaké vla chut -Takže v podstate myšlienka je popísať reálne veci kódom pomocou vlastností (ktorým hovoríme `vlastnosti objektu/object properties`) a akcií (tie nazývame `metódy`). +Takže v podstate hlavná myšlienka je popísať reálne veci kódom pomocou vlastností (ktorým hovoríme `vlastnosti objektu/object properties`) a akcií (tie nazývame `metódy`). -Ako teda budeme modelovať blog post? Chceme predsa vytvoriť blog, nie? +Ako teda budeme modelovať blogový príspevok? Chceme predsa vytvoriť blog, nie? -Musíme odpovedať na otázku: Čo je vlastne blog post? Aké vlastnosti by mal mať? +Musíme odpovedať na otázku: Čo je vlastne blogový príspevok? Aké vlastnosti by mal mať? -No, náš blog post určite potrebuje nejaký text s obsahom a titulkom, nie? Bolo by tiež fajn vedieť, kto ho napísal - takže potrebujeme autora. A nakoniec, chceme vedieť, kedy bol post vytvorený a zverejnený. +No, náš blogový príspevok určite potrebuje nejaký text s obsahom a titulkom, nie? Bolo by tiež fajn vedieť, kto ho napísal - takže potrebujeme autorku či autora. A nakoniec, chceme vedieť, kedy bol príspevok vytvorený a zverejnený. Post -------- @@ -50,7 +50,7 @@ No, náš blog post určite potrebuje nejaký text s obsahom a titulkom, nie? Bo published_date -Čo všetko môžeme s blog postom robiť? Bolo by dobré mať nejakú `metódu`, ktorá post publikuje, však? +Čo všetko môžeme s blogovým príspevkom robiť? Bolo by dobré mať nejakú `metódu`, ktorá príspevok publikuje, však? Takže budeme potrebovať metódu `publish`. @@ -58,17 +58,17 @@ Keďže už vieme, čo chceme dosiahnuť, začnime tvoriť model v Djangu! ## Django model -Keďže už vieme, čo je objekt, môžeme vytvoriť Django model pre náš blog post. +Keďže už vieme, čo je objekt, môžeme vytvoriť Django model pre náš blogový príspevok. -Model v Djangu je špeciálny typ objektu - je uložený v `databáze`. Databáza je súbor údajov. Je to miesto, kde budeš ukladať informácie o užívateľoch, príspevkoch na blogu, atď. Na ukladanie údajov budeme používať databázu SQLite. Je to štandardný východzí databázový adaptér v Djangu -- nateraz nám bude stačiť. +Model v Djangu je špeciálny typ objektu - je uložený v `databáze`. Databáza je súbor údajov. Je to miesto, kde budeš ukladať informácie o užívateľoch/užívateľkách, blogových príspevkoch atď. Na ukladanie údajov budeme používať databázu SQLite. Je to prednastavený databázový adaptér v Djangu -- nateraz nám bude stačiť. Model v databáze si môžeš predstaviť ako tabuľku so stĺpcami (polia) a riadkami (dáta). ### Vytvorenie aplikácie -Aby sme mali všetko pekne upratané, vytvoríme vo vnútri nášho projektu samostatnú aplikáciu. Je dobré mať všetko zorganizované hneď od začiatku. Aby sme vytvorili aplikáciu, musíš v konzole spustiť nasledujúci príkaz (v adresári `djangogirls`, kde sa nachádza súbor `manage.py`): +Aby sme mali všetko pekne upratané, vytvoríme vo vnútri nášho projektu samostatnú aplikáciu. Je dobré mať všetko zorganizované hneď od začiatku. Aby sme vytvorili aplikáciu, musíme v konzole spustiť nasledujúci príkaz (v priečinku `djangogirls`, kde sa nachádza súbor `manage.py`): -{% filename %}Mac OS X and Linux:{% endfilename %} +{% filename %}Mac OS X a Linux:{% endfilename %} (myvenv) ~/djangogirls$ python manage.py startapp blog @@ -78,13 +78,13 @@ Aby sme mali všetko pekne upratané, vytvoríme vo vnútri nášho projektu sam (myvenv) C:\Users\Name\djangogirls> python manage.py startapp blog -Uvidíš, že pribudne nový adresár `blog`, ktorý obsahuje množstvo súborov. Adresáre a súbory v našom projekte by mali vyzerať takto: +Uvidíš, že pribudne nový priečinok `blog`, ktorý obsahuje množstvo súborov. Priečinky a súbory v našom projekte by mali vyzerať takto: djangogirls ├── blog - │   ├── __init__.py │   ├── admin.py │   ├── apps.py + │   ├── __init__.py │   ├── migrations │   │   └── __init__.py │   ├── models.py @@ -92,14 +92,19 @@ Uvidíš, že pribudne nový adresár `blog`, ktorý obsahuje množstvo súborov │   └── views.py ├── db.sqlite3 ├── manage.py - └── mysite - ├── __init__.py - ├── settings.py - ├── urls.py - └── wsgi.py + ├── mysite + │   ├── asgi.py + │   ├── __init__.py + │   ├── settings.py + │   ├── urls.py + │   └── wsgi.py + ├── myvenv + │   └── ... + └── requirements.txt + -Po vytvorení aplikácie tiež musíš Djangu povedať, že ju má použiť. To urobíme v súbore `mysite/settings.py`. Musíme nájsť `INSTALLED_APPS` a pridať riadok obsahujúci `'blog'` tesne pred uzatváraciu zátvorku`]`. Takže výsledok nášho snaženia bude vyzerať takto: +Po vytvorení aplikácie tiež musíš Djangu povedať, že ju má použiť. To spravíme v súbore `mysite/settings.py` - otvor ho vo svojom editore. Musíme nájsť `INSTALLED_APPS` a pridať riadok `'blog',` tesne pred uzatváraciu zátvorku `]`. Takže výsledok nášho snaženia bude vyzerať takto: {% filename %}mysite/settings.py{% endfilename %} @@ -115,11 +120,11 @@ INSTALLED_APPS = [ ] ``` -### Vytvorenie modelu blog postu +### Vytvorenie modelu príspevku -V súbore `blog/models.py` definujeme všetky objekty, ktoré sa nazývajú `modely` - na tomto mieste definujeme náš blog post. +V súbore `blog/models.py` definujeme všetky objekty, ktoré sa nazývajú `modely` - na tomto mieste definujeme náš príspevok. -Otvor `blog/models.py`, všetko z neho odstráň a napíš nasledovný kód: +Otvor `blog/models.py` v editore, všetko z neho odstráň a napíš nasledovný kód: {% filename %}blog/models.py{% endfilename %} @@ -133,10 +138,8 @@ class Post(models.Model): author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) title = models.CharField(max_length=200) text = models.TextField() - created_date = models.DateTimeField( - default=timezone.now) - published_date = models.DateTimeField( - blank=True, null=True) + created_date = models.DateTimeField(default=timezone.now) + published_date = models.DateTimeField(blank=True, null=True) def publish(self): self.published_date = timezone.now() @@ -146,34 +149,34 @@ class Post(models.Model): return self.title ``` -> Dvakrát skontroluj, či si použila 2 podčiarkovníky (`_`) na oboch stranách `str`. Táto konvencia sa v Pythone často používa a niekedy sa tomu hovorí "dunder" (skratka pre anglické Double-UNDERscore). +> Dvakrát skontroluj, či si použila 2 podčiarkovníky (`_`) na oboch stranách `str`. Táto konvencia sa v Pythone často používa a niekedy sa tomu hovorí "dunder" (skratka pre anglické double-underscore). Vyzerá to strašidelne, nie? Ale neboj sa, vysvetlíme si, čo tieto riadky znamenajú! -Všetky riadky začínajúce s `from` alebo `import` pridávajú časti z iných súborov. Takže namiesto kopírovania rovnakých vecí v každom súbore môžeme zahrnúť niektoré časti pomocou `from ... import ...`. +Všetky riadky začínajúce na `from` alebo `import` pridávajú časti z iných súborov. Takže namiesto kopírovania tých istých vecí v každom súbore môžeme vložiť niektoré časti pomocou `from ... import ...`. `class Post(models.Model):` - tento riadok definuje náš model (je to `objekt`). - `class` je špeciálne kľúčové slovo, ktoré naznačuje, že definujeme objekt. -- `Post` je meno nášho modelu. Môžeme mu dať iný názov (ale musíme sa vyhnúť špeciálnym a prázdnym znakom). Názov triedy vždy začni písmenami. -- `models.Model` znamená, že Post je Django Model, takže Django vie, že by mal byť uložený v databáze. +- `Post` je meno nášho modelu. Môžeme mu dať iný názov (ale musíme sa vyhnúť špeciálnym znakom a medzerám). Názov triedy vždy začni písmenami. +- `models.Model` znamená, že Post je djangový model, takže Django vie, že by mal byť uložený v databáze. -Teraz zadefinujeme vlastnosti, o ktorých sme hovorili: `title` (titulka), `text`, `created_date` (dátum vytvorenia), `published_date` (dátum zverejnenia) a `author` (autor). Na to ale musíme zadefinovať typ každého poľa (Je to text? Číslo? Dátum? Vzťah k inému objektu, napr. objektu User?) +Teraz zadefinujeme vlastnosti, o ktorých sme hovorili: `title` (titulka), `text`, `created_date` (dátum vytvorenia), `published_date` (dátum zverejnenia) a `author` (autor(ka)). Na to ale musíme zadefinovať typ každého poľa (Je to text? Číslo? Dátum? Vzťah k inému objektu, napr. objektu User?) -- `modely. CharField` - takto môžeš definovať text s obmedzeným počtom znakov. +- `models.CharField` - takto môžeš definovať text s obmedzeným počtom znakov. - `models.TextField` - toto je pre dlhé texty bez obmedzenia. To znie ideálne pre blogový príspevok, nie? -- `models.DateTimeField` - dátum a čas. -- `models.ForeignKey` - odkaz na iný model. +- `models.DateTimeField` - toto je dátum a čas. +- `models.ForeignKey` - toto je odkaz na iný model. -Nebudeme si tu vysvetľovať každý kúsok kódu, pretože by to zabralo príliš veľa času. Ak chceš vedieť viac o poliach modelu a definovaní ďalších vecí okrem tých, čo sme popísali vyššie, skús sa pozrieť do dokumentácie Djanga (https://docs.djangoproject.com/en/1.11/ref/models/fields/#field-types). +Nebudeme si tu vysvetľovať každý kúsok kódu, pretože by to zabralo príliš veľa času. Ak chceš vedieť viac o modelových poliach a definovaní ďalších vecí okrem tých, čo sme popísali vyššie, skús sa pozrieť do dokumentácie Djanga (https://docs.djangoproject.com/en/3.2/ref/models/fields/#field-types). -A čo `def publish(self):`? To je presne tá metóda `publish`, o ktorej sme hovorili predtým. `def` znamená, že ide o funkciu/metódu a `publish` je názov metódy. Názov metódy môžeš zmeniť, ak chceš. Pravidlo pre názvy metód je, že používame malé písmená a podčiarkovníky namiesto medzier. Napríklad metóda, ktorá vypočíta priemernú cenu by sa mohla nazývať `pocitaj_priemernu_cenu`. +A čo `def publish(self):`? To je presne tá metóda `publish`, o ktorej sme hovorili predtým. `def` znamená, že ide o funkciu/metódu, a `publish` je jej názov. Názov metódy môžeš zmeniť, ak chceš. Pravidlo pre názvy metód je, že používame malé písmená a podčiarkovníky namiesto medzier. Napríklad metóda, ktorá vypočíta priemernú cenu by sa mohla nazývať `pocitaj_priemernu_cenu`. -Metódy často niečo vracajú (angl. `return`). Príklad nájdeš napríklad v metóde `__str__`. V tomto prípade, keď zavoláme `__str__()`, dostaneme text (**string**) s názvom postu. +Metódy často niečo vracajú (`return`). Príklad nájdeš napríklad v metóde `__str__`. V tomto prípade, keď zavoláme `__str__()`, dostaneme text (**string**) s názvom príspevku. -Tiež si všimni, že `def publish(self):` a `def __str__(self):` sú odsadené vo vnútri našej triedy. Pretože Python je citlivý na medzery, musíme odsadiť naše metódy vo vnútri triedy. Inak metódy nebudú patriť do triedy, a môže dojsť k neočakávanému správaniu. +Tiež si všimni, že `def publish(self):` a `def __str__(self):` sú odsadené vo vnútri našej triedy. Keďže Python je citlivý na medzery, musíme odsadiť naše metódy vo vnútri triedy. Inak metódy nebudú patriť do triedy a môže dojsť k neočakávanému správaniu. -Ak čokoľvek nie je jasné, neváhaj a spýtaj sa mentora/ku! Je nám jasné, že je to komplikované, najmä ak sa učíš, čo sú objekty a funkcie súčasne. Ale dúfame, že teraz už to vyzerá trochu menej magicky! +Ak čokoľvek nie je jasné, neváhaj a spýtaj sa mentora či mentorky! Vieme, že je to komplikované, najmä ak sa učíš, čo sú objekty a funkcie súčasne. Ale dúfame, že teraz už to vyzerá trochu menej magicky! ### Vytváranie tabuliek pre modely v databáze @@ -183,12 +186,12 @@ Posledným krokom je pridať náš nový model do databázy. Najprv musíme Djan (myvenv) ~/djangogirls$ python manage.py makemigrations blog Migrations for 'blog': - blog/migrations/0001_initial.py: + blog/migrations/0001_initial.py - - Create model Post + - Create model Post -**Poznámka:** Nezabudni uložiť súbory ktoré upravuješ. Inak počítač spustí starú verziu, ktorá môže skončiť chybou. +**Poznámka:** Nezabudni uložiť súbory, ktoré upravuješ. Inak počítač spustí starú verziu, ktorá môže skončiť chybou. Django pripravil migračný súbor, ktorý musíme aplikovať na našu databázu. Napíš `python manage.py migrate blog` a výstup by mal byť: @@ -198,8 +201,7 @@ Django pripravil migračný súbor, ktorý musíme aplikovať na našu databázu Operations to perform: Apply all migrations: blog Running migrations: - Rendering model states... DONE Applying blog.0001_initial... OK -Hurá! Náš Post model je už v databáze! Bolo by fajn ho vidieť, nie? Prejdi na nasledujúcu kapitolu a uvidíš ako vyzerá tvoj Post! \ No newline at end of file +Hurá! Náš model Post je už v databáze! Bolo by fajn ho vidieť, nie? Prejdi na nasledujúcu kapitolu a uvidíš, ako vyzerá tvoj Post! \ No newline at end of file diff --git a/sk/django_orm/README.md b/sk/django_orm/README.md old mode 100755 new mode 100644 index 39cc9cb3290..5eac91986a0 --- a/sk/django_orm/README.md +++ b/sk/django_orm/README.md @@ -1,14 +1,14 @@ -# Django ORM a QuerySety +# Django ORM (QuerySety) V tejto kapitole sa naučíš, ako sa Django pripája k databáze a ukladá do nej údaje. Poďme na to! ## Čo je QuerySet? -QuerySet je zoznam objektov daného modelu. QuerySet ti umožňuje čítať dáta z databázy, filtrovať a zoraďovať ich. +QuerySet je v podstate zoznam objektov daného modelu. QuerySet ti umožňuje čítať dáta z databázy, filtrovať a zoraďovať ich. -Najjednoduchšie bude ukázať si to na príklade. Vyskúšajme si to. +Najjednoduchšie bude ukázať si to na príklade. Vyskúšajme si to, čo povieš? -## Django shell (konzola) +## Django konzola Otvor si lokálnu konzolu (nie na PythonAnywhere) a napíš tento príkaz: @@ -26,7 +26,7 @@ Toto by sa ti malo zobraziť: >>> ``` -Nachádzaš sa v interaktívnej Django konzole. Je to ako konzola Pythonu, ale s trochou Django mágie :). Môžeš v nej samozrejme použiť všetky Pythonovské príkazy. +Teraz si v interaktívnej Django konzole. Je to ako konzola Pythonu, ale s trochou Django mágie. :) Môžeš v nej používať všetky pythonové príkazy. ### Všetky objekty @@ -41,7 +41,7 @@ Traceback (most recent call last): NameError: name 'Post' is not defined ``` -Ups! Objavila sa chybová hláška! Hovorí nám, že nič také ako Post (príspevok) neexistuje. To je správne - zabudli sme ho totiž najskôr naimportovať! +Ups! Objavila sa chybová hláška. Hovorí nám, že nič také ako Post neexistuje. To dáva zmysel - zabudli sme ho totiž najskôr naimportovať! {% filename %}command-line{% endfilename %} @@ -58,11 +58,11 @@ Naimportujeme model `Post` z `blog.models`. Skúsme teda znova zobraziť všetky , ]> ``` -Je to zoznam príspevkov, ktoré sme už predtým vytvorili! Vytvorili sme ich pomocou Django administrátorského rozhrania. No radi by sme vytvorili nové príspevky pomocou Pythonu, tak ako na to? +Je to zoznam príspevkov, ktoré sme vytvorili dávnejšie! Vytvorili sme ich pomocou Django administrátorského rozhrania. No radi by sme vytvorili nové príspevky pomocou Pythonu, tak ako na to? ### Vytvorenie objektu -Takto vytvoríš nový Post objekt v databáze: +Takto vytvoríš nový objekt typu Post v databáze: {% filename %}command-line{% endfilename %} @@ -80,7 +80,7 @@ Najskôr naimportujme User model: >>> from django.contrib.auth.models import User ``` -Akých užívateľov máme v našej databáze? Skús toto: +Akých užívateľov a užívateľky máme v našej databáze? Skús toto: {% filename %}command-line{% endfilename %} @@ -89,7 +89,7 @@ Akých užívateľov máme v našej databáze? Skús toto: ]> ``` -To je superuser, ktorého sme už vytvorili predtým. Teraz získajme inštanciu tohto užívateľa: +Toto je superuser, ktorého sme vytvorili dávnejšie! Poďme ho dostať ako inštanciu (uprav tento riadok tak, aby obsahoval tvoje vlastné užívateľské meno): {% filename %}command-line{% endfilename %} @@ -97,7 +97,7 @@ To je superuser, ktorého sme už vytvorili predtým. Teraz získajme inštanciu >>> me = User.objects.get(username='ola') ``` -Ako vidíš, teraz získame (angl. `get`) užívateľa (angl. `User`) s užívateľským meno (angl. `username`), ktoré sa rovná 'ola'. Aké elegantné! Samozrejme musíš si to zmeniť tak aby tam bolo tvoje meno. +Ako môžeš vidieť, teraz sme dostali (`get`) `Usera` s užívateľským menom (`username`) 'ola'. Môže byť! Teraz už konečne môžeme vytvoriť náš prvý príspevok: @@ -105,9 +105,10 @@ Teraz už konečne môžeme vytvoriť náš prvý príspevok: ```python >>> Post.objects.create(author=me, title='Sample title', text='Test') + ``` -Hurá! Chceš si overiť, či to fungovalo? +Hurá! Chceš si overiť, či to zabralo? {% filename %}command-line{% endfilename %} @@ -118,43 +119,43 @@ Hurá! Chceš si overiť, či to fungovalo? Je to tam, jeden príspevok v zozname pribudol! -### Pridaj viac príspevkov +### Pridanie ďalších príspevkov -Teraz sa môžeš trochu pobaviť a pridať pár ďalších príspevkov, aby si si vyskúšala ako to funguje. Pridaj dva-tri ďalšie príspevky a potom poďme na ďalšiu časť. +Teraz sa môžeš trochu zabaviť a pridať pár ďalších príspevkov, aby si si vyskúšala, ako to funguje. Pridaj dva-tri ďalšie príspevky a potom poďme na ďalšiu časť. ### Filtrovanie objektov -Dôležitou vlastnosťou QuerySetov je možnosť ich filtrovať. Povedzme, že chceme nájsť všetky príspevky, ktorých autorom je užívateľ (User) ola. Použijeme `filter` namiesto `all` v príkaze `Post.objects.all()`. V zátvorkách definujeme jednu alebo viac podmienok, ktoré majú byť splnené príspevkom, aby skončil v tvojom querysete. V našom prípade je to `author`, ktorý sa rovná `me`. V Djangu to napíšeš takto: `author=me`. Náš kúsok kódu bude teraz vyzerať takto: +Dôležitou vlastnosťou QuerySetov je možnosť ich filtrovať. Povedzme, že chceme nájsť všetky príspevky, ktorých autorkou je užívateľka (User) ola. Použijeme `filter` namiesto `all` v príkaze `Post.objects.all()`. V zátvorkách definujeme jednu alebo viac podmienok, ktoré má príspevok spĺňať, aby skončil v našom querysete. V našom prípade je to `author`, ktorý sa rovná `me`. V Djangu to napíšeš takto: `author=me`. Náš kúsok kódu bude teraz vyzerať takto: {% filename %}command-line{% endfilename %} ```python ->>> Post.objects.filter(author=ja) -[, , , ] +>>> Post.objects.filter(author=me) +, , , ]> ``` -Skúsme vyhľadať všetky príspevky, ktoré obsahujú slovo 'title' v políčku `title`? +Alebo možno chceme vyhľadať všetky príspevky, ktoré obsahujú slovo 'title' v poli `title`? {% filename %}command-line{% endfilename %} ```python >>> Post.objects.filter(title__contains='title') -[, ] +, ]> ``` > **Poznámka** Medzi `title` a `contains` sú dva podčiarkovníky (`_`). Django ORM používa túto syntax, aby oddelil názvy polí ("title") a operácie či filtre ("contains"). Ak použiješ iba jeden podčiarkovník, dostaneš chybu "FieldError: Cannot resolve keyword title_contains". -Môžeš tiež získať zoznam všetkých publikovaných postov. To urobíme vyfiltrovaním príspevkov, ktoré majú nastavený `published_date` v minulosti: +Môžeš tiež získať zoznam všetkých publikovaných príspevkov. To urobíme vyfiltrovaním príspevkov, ktorých `published_date` je v minulosti: {% filename %}command-line{% endfilename %} ```python >>> from django.utils import timezone >>> Post.objects.filter(published_date__lte=timezone.now()) -[] + ``` -Bohužiaľ, príspevok, ktorý sme pridali z konzoly Pythonu, ešte nie je publikovaný. To môžeme zmeniť! Najskôr získaj inštanciu postu, ktorý chceme publikovať: +Bohužiaľ, príspevok, ktorý sme pridali z konzoly Pythonu, ešte nie je publikovaný. To môžeme zmeniť! Najskôr získaj inštanciu príspevku, ktorý chceme publikovať: {% filename %}command-line{% endfilename %} @@ -176,7 +177,7 @@ Teraz skús získať zoznam publikovaných postov znova (stlač šípku hore tri ```python >>> Post.objects.filter(published_date__lte=timezone.now()) -[] +]> ``` ### Zoradenie objektov @@ -187,7 +188,7 @@ QuerySety tiež umožňujú zoradiť zoznamy objektov. Skúsme ich zoradiť pod ```python >>> Post.objects.order_by('created_date') -[, , , ] +, , , ]> ``` Poradie môžeme vymeniť pridaním `-` na začiatok: @@ -196,19 +197,21 @@ Poradie môžeme vymeniť pridaním `-` na začiatok: ```python >>> Post.objects.order_by('-created_date') -[, , , ] +, , , ]> ``` -### Reťazenie QuerySetov +### Zložité požiadavky pomocou reťazenia metód -QuerySety môžeš dokonca kombinovať pomocou **reťazenia**: +Ako sme videli, niektoré metódy na `Post.objects` vracajú QuerySet. Tie isté metódy môžeš zavolať na ďalšom QuerySete a vrátia ti nový QuerySet. Týmto môžeš kombinovať ich efekt **reťazením**: - >>> Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') - +```python +>>> Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') +, , , ]> +``` -To je skutočne silný nástroj, ktorým môžeš písať pomerne komplexné požiadavky (queries). +To je skutočne silný nástroj, vďaka ktorému môžeš písať pomerne komplexné požiadavky (queries). -Super! Teraz si pripravená na ďalšiu časť! Shell zatvoríš príkazom: +Super! Teraz si pripravená na ďalšiu časť! Django konzolu zatvoríš príkazom: {% filename %}command-line{% endfilename %} diff --git a/sk/django_start_project/README.md b/sk/django_start_project/README.md old mode 100755 new mode 100644 index 9095cd62ce9..98fd3aeaadb --- a/sk/django_start_project/README.md +++ b/sk/django_start_project/README.md @@ -2,86 +2,90 @@ > Časť tejto kapitoly je založená na tutoriáli Geek Girls Carrots (https://github.com/ggcarrots/django-carrots). > -> Časti tejto kapiolty sú založená na [django-marcador tutorial](http://django-marcador.keimlink.de/) pod licenciou Creative Commons Attribution-ShareAlike 4.0 International License. Tutoriál django-marcador je autorsky chránený Markusom Zapke-Gründemannom et al. +> Časti tejto kapitoly sú založené na [django-marcador tutorial](http://django-marcador.keimlink.de/) pod licenciou Creative Commons Attribution-ShareAlike 4.0 International License. Tutoriál django-marcador je autorsky chránený Markusom Zapke-Gründemannom et al. Vytvoríme jednoduchý blog! -Prvý krok je vytvoriť nový Django projekt. To v podstate znamená, že spustíme pár skriptov, poskytovaných Djangom, ktoré pre nás vytvoria kostru Django projektu. Je to len pár zložiek a súborov, ktoré použijeme neskôr. +Prvý krok je vytvoriť nový Django projekt. To v podstate znamená, že spustíme pár skriptov, poskytovaných Djangom, ktoré pre nás vytvoria kostru Django projektu. Je to len pár priečinkov a súborov, ktoré použijeme neskôr. -Mená niektorých súborov a zložiek sú pre Django veľmi dôležité. Súbory, ktoré teraz vytvoríme, by si nemala premenovať. Ich presúvanie na iné miesto taktiež nie je dobrý nápad. Django potrebuje udržovať určitú štruktúru, aby bol schopný nájsť dôležité veci. +Mená niektorých súborov a priečinkov sú pre Django veľmi dôležité. Súbory, ktoré teraz vytvoríme, by si nemala premenovať. Presúvať ich na iné miesto taktiež nie je dobrý nápad. Django potrebuje udržovať určitú štruktúru, aby bolo schopné nájsť dôležité veci. -> Nezabudni všetko spúšťať vo virtualenv. Pokiaľ vo svojej konzole nevidíš prefix `(myvenv)` musíš aktivovať virtualenv. Ako na to bolo vysvetlené v kapitole **Inštalácia Django** v časti **Práca s virtualenv**. Pokiaľ napíšeš `myvenv\Scripts\activate` na Windowsoch, alebo `source myvenv/bin/activate` na Mac OS X alebo Linux, malo by všetko fungovať. +> Nezabudni všetko spúšťať vo virtualenve. Pokiaľ vo svojej konzole nevidíš predponu `(myenv)`, musíš aktivovať virtualenv. Ako na to bolo vysvetlené v kapitole **Inštalácia Djanga** v časti **Práca s virtualenvom**. Pokiaľ napíšeš `myvenv\Scripts\activate` na Windowse alebo `source myvenv/bin/activate` na Mac OS X alebo Linuxe, malo by všetko fungovať. -Vo svojej Mac OS X alebo Linux konzole spusti tento príkaz; **nezabudni pridať bodku `.` na konci** +Vo svojej Mac OS X alebo Linux konzole spusti tento príkaz. **Nezabudni pridať bodku `.` na konci!** {% filename %}command-line{% endfilename %} (myvenv) ~/djangogirls$ django-admin startproject mysite . -> Bodka `.` je dôležitá, pretože hovorí skriptom, aby nainštalovali Django v tvojej aktuálnej zložke (pre ktorú je bodka `.` skratkou). +> Bodka `.` je dôležitá, pretože hovorí skriptu, aby nainštaloval Django v tvojom aktuálnom priečinku (pre ktorý je bodka `.` skratkou). > -> **Poznámka** Pri písaní predchádzajúceho príkazu nezabudni, že píšeš len časť, ktorá začína django-admin alebo `django-admin. py`. `(myvenv) ~/djangogirls$` zobrazené tu je len príkladom cesty, kam budeš zadávať svoje príkazy. +> **Poznámka** Pri písaní predchádzajúceho príkazu nezabudni, že píšeš len časť, ktorá začína `django-admin`. Časť `(myvenv) ~/djangogirls$` je len príkladom promptu, kam budeš zadávať svoje príkazy. -Vo Windowse spusti tento príkaz; **nezabudni pridať bodku `.` na konci**: +Vo Windowse spusti tento príkaz. **(Nezabudni pridať bodku `.` na konci)**: {% filename %}command-line{% endfilename %} (myvenv) C:\Users\Name\djangogirls> django-admin.exe startproject mysite . -> Bodka `.` je dôležitá, pretože hovorí skriptom, aby nainštalovali Django v tvojej aktuálnej zložke (pre ktorú je bodka `.` skratkou). +> Bodka `.` je dôležitá, pretože hovorí skriptu, aby nainštaloval Django v tvojom aktuálnom priečinku (pre ktorý je bodka `.` skratkou). > -> **Poznámka** Pri písaní predchádzajúceho príkazu nezabudni, že píšeš len časť, ktorá začína `django-admin.exe`. `(myvenv) C:\Users\Name\djangogirls>` zobrazené tu je len príkladom cesty, kam budeš zadávať svoje príkazy. +> **Poznámka** Pri písaní predchádzajúceho príkazu nezabudni, že píšeš len časť, ktorá začína `django-admin.exe`. Časť `(myvenv) C:\Users\Name\djangogirls>` je len príkladom promptu, kam budeš zadávať svoje príkazy. -`django-admin.py` je skript, ktorý pre teba vytvorí zložky a súbory. Momentálne by si mala mať štruktúru adresárov, ktorá vyzerá takto: +`django-admin.py` je skript, ktorý pre teba vytvorí priečinky a súbory. Momentálne by si mala mať štruktúru priečinkov, ktorá vyzerá takto: djangogirls - ├───manage.py - └───mysite - settings.py - urls.py - wsgi.py - __init__.py + ├── manage.py + ├── mysite + │   ├── asgi.py + │   ├── __init__.py + │   ├── settings.py + │   ├── urls.py + │   └── wsgi.py + ├── myvenv + │   └── ... + └── requirements.txt -> **Poznámka**: adresárovej štruktúre, uvidíš `venv` adresár, ktorý sme vytvorili. +> **Poznámka**: v štruktúre priečinkov uvidíš aj adresár `myvenv`, ktorý sme vytvorili dávnejšie. `manage.py` je skript, ktorý pomáha so správou stránky. Okrem iného budeme vďaka nemu môcť spustiť na našom počítači webový server, bez toho, aby sme inštalovali čokoľvek iné. Súbor `settings.py` obsahuje konfiguráciu tvojej webovej stránky. -Pamätáš, keď sme rozprávali o doručovateľovi listov, ktorý zisťuje kam doručiť list? `urls.py` obsahuje zoznam vzorov, ktoré používa `urlresolver`. +Pamätáš, keď sme sa rozprávali o poštárke, ktoré zisťuje, kam doručiť list? `urls.py` obsahuje zoznam vzorov, ktoré používa `urlresolver`. -Zatiaľ ignorujme ostatné súbory, keďže ich teraz aj tak nebudeme meniť. Jediná vec na ktorú netreba zabudnúť je, že ich nesmieš omylom zmazať! +Zatiaľ ignorujme ostatné súbory, keďže ich teraz aj tak nebudeme meniť. Jediná vec, na ktorú netreba zabudnúť, je, že ich nesmieš omylom zmazať! ## Zmena nastavení Spravme pár zmien v `mysite/settings.py`. Otvor súbor v editore kódu, ktorý si si nainštalovala predtým. -**Poznámka**: Pamätaj, že `settings.py` je obyčajný súbor, ako každý iný. Môžeš ho otvoriť z kodového editoru, pomocou "Súbor -> Otvoriť" možnosti v menu. Malo by sa ti zobraziť štandardné okno v ktorom vyhľadáš svoj `settings.py` súbor a označíš ho. Prípadne môžeš ísť do priečinka djangogirls na pracovnej ploche a kliknúť na súbor pravým tlačidlom myši. Potom vyber editor kódu zo zoznamu. Výber editora je dôležitý, pretože môžeš mať nainštalované iné programy, ktoré dokážu tento súbor otvoriť, ale nedovolia ti ho upravovať. +**Poznámka**: Pamätaj, že `settings.py` je obyčajný súbor, ako každý iný. Môžeš ho otvoriť z editoru pomocou možnosti "Súbor -> Otvoriť" v menu. Malo by sa ti zobraziť štandardné okno, v ktorom vyhľadáš svoj `settings.py` súbor a označíš ho. Prípadne môžeš ísť do priečinku djangogirls na pracovnej ploche a kliknúť na súbor pravým tlačidlom myši. Potom vyber editor kódu zo zoznamu. Výber editora je dôležitý, pretože môžeš mať nainštalované iné programy, ktoré dokážu tento súbor otvoriť, ale nedovolia ti ho upravovať. -Bolo by dobré mať na našej stránke správny čas. Choď na [zoznam časových pásiem na wikipedii](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) a skopíruj svoje časové pásmo (napr. `Europe/Berlin`). +Bolo by dobré mať na našej stránke správny čas. Choď na [zoznam časových pásiem na Wikipédii](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) a skopíruj svoje časové pásmo (TZ) (napr. `Europe/Bratislava`). -V súbore `settings.py`, nájdi riadok, ktorý obsahuje `TIME_ZONE` a uprav ho tak, aby obsahoval tvoje časové pásmo. Napríklad: +V súbore `settings.py` nájdi riadok, ktorý obsahuje `TIME_ZONE`, a uprav ho tak, aby obsahoval tvoje časové pásmo. Napríklad: {% filename %}mysite/settings.py{% endfilename %} ```python -TIME_ZONE = 'Europe/Berlin' +TIME_ZONE = 'Europe/Bratislava' ``` -Jazykoví kód sa skladá z jazyka, napr. `en` pre angličtinu alebo `de` pre nemčinu a kódu krajiny, napr. `de` pre Nemecko, alebo `ch` pre Švajčiarsko. Toto si pridaj, ak chceš aby predvolené tlačidlá a oznamenia v Djangu boli v tvojom jazyku. Potom bude tlačidlo "Cancel" preložené do jazyka, ktorý tu definuješ. [Django je dodávaný s množstvom pripravených prekladov](https://docs.djangoproject.com/en/1.11/ref/settings/#language-code). +Jazykový kód sa skladá z jazyka, napr. `en` pre angličtinu alebo `sk` pre slovenčinu, a kódu krajiny, napr. `de` pre Nemecko alebo `ch` pre Švajčiarsko. Ak angličtina nie je tvoj materinský jazyk, môžeš pridať nasledovné, ak chceš zmeniť nápisy na tlačidlách a pripomienkach do svojho jazyka. Ak to spravíš, bude napríklad tlačidlo "Cancel" preložené do jazyka, ktorý tu definuješ. [Django má zabudovaných veľa prekladov](https://docs.djangoproject.com/en/3.2/ref/settings/#language-code). -Zmeň kódu jazyka zmenou nasledujúceho riadku: +Ak chceš iný jazyk, zmeň jazykový kód tým, že zmeníš nasledujúci riadok: {% filename %}mysite/settings.py{% endfilename %} @@ -89,16 +93,16 @@ Zmeň kódu jazyka zmenou nasledujúceho riadku: LANGUAGE_CODE = 'de-ch' ``` -Budeme tiež musieť pridať cestu pre statické súbory. (Dozvieme sa všetko o statických súboroch a CSS neskôr v tutoriále.) Prejdi na *koniec* súboru a pod `STATIC_URL` riadkom, pridaj ďalší s názvom `STATIC_ROOT`: +Budeme tiež musieť pridať cestu pre statické súbory. (O statických súboroch a CSS si povieme viac neskôr.) Choď na *koniec* súboru a rovno pod `STATIC_URL` pridaj `STATIC_ROOT`: {% filename %}mysite/settings.py{% endfilename %} ```python STATIC_URL = '/static/' -STATIC_ROOT = os.path.join(BASE_DIR, 'static') +STATIC_ROOT = BASE_DIR / 'static' ``` -Keď `DEBUG` je `True` a `ALLOWED_HOSTS` je prázdne, host je overovaný vôči `['localhost', '127.0.0.1', '[::1]']`. Toto sa nebude zhodovať s naším hostname na PythonAnywhere, keď nasadíme našu aplikáciu, kvôli tomu zmeníme nasledovné nastavenie: +Keď `DEBUG` je `True` a `ALLOWED_HOSTS` je prázdne, host sa validuje voči `['localhost', '127.0.0.1', '[::1]']`. Toto sa nebude zhodovať s naším hostname na PythonAnywhere, keď nasadíme našu aplikáciu, preto zmeníme nasledovné nastavenie: {% filename %}mysite/settings.py{% endfilename %} @@ -106,13 +110,55 @@ Keď `DEBUG` je `True` a `ALLOWED_HOSTS` je prázdne, host je overovaný vôči ALLOWED_HOSTS = ['127.0.0.1', '.pythonanywhere.com'] ``` -> **Poznámka**: Ak používaš Chromebook, pridaj nasledovný riadok na koniec settings.py súboru: `MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'` +> **Poznámka**: Ak používaš Chromebook, pridaj nasledovný riadok na koniec súboru settings.py: `MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'` > -> Tiež pridaj `. c9users.io` na `ALLOWED_HOSTS` ak používaš cloud9 +> Ak používaš Cloud 9, tiež pridaj `.amazonaws.com` do `ALLOWED_HOSTS`. +> +> Ak hostuješ svoj projekt na `Glitch.com`, mali by sme ochrániť tajný kľúč, ktorý by mal zostať skrytý (inak by ho mohol vidieť každý, kto použije tvoj projekt): +> +> - Najprv si musíme vytvoriť nový náhodný tajný kľúč. Otvor Glitch terminál a napíš nasledujúci príkaz: +> +> {% filename %}command-line{% endfilename %} +> +> ```bash +> python -c 'from django.core.management.utils import get_random_secret_key; \ +> print(get_random_secret_key())' +> ``` +> +> Mal by sa ti zobraziť dlhý náhodný reťazec, ktorý je ako stvorený pre tvoju novú Django webstránku. Tento kľúč teraz skopírujeme do súboru `.env`, ktorý Glitch ukáže len autorovi či autorke danej webstránky. +> +> - Vytvor súbor pod názvom `.env` v základnom adresári tvojho projektu a pridaj doň nasledovné: +> +> {% filename %}.env{% endfilename %} +> +> ```bash +> # Tuto pomedzi apostrofy na zaciatku a na konci mozes skopirovat nahodny kluc, ktory si vygenerovala vyssie +> SECRET='3!0k#7ds5mp^-x$lqs2%le6v97h#@xopab&oj5y7d=hxe511jl' +> ``` +> +> - Následne uprav svoj Django settings súbor tým, že doň vložíš túto tajnú hodnotu, a nastav názov tvojej Django webstránky: +> +> {% filename %}mysite/settings.py{% endfilename %} +> +> ```python +> import os +> +> SECRET_KEY = os.getenv('SECRET') +> ``` +> +> - A ešte trochu nižšie v tom istom súbore doň vložíme meno tvojej novej Glitch stránky: +> +> {% filename %}mysite/settings.py{% endfilename %} +> +> ```python +> ALLOWED_HOSTS = [os.getenv('PROJECT_DOMAIN') + ".glitch.me"] +> ``` +> +> Hodnota `PROJECT_DOMAIN` je automaticky vygenerovaná Glitchom. Bude taká istá, ako je meno tvojho projektu. ## Nastavenie databázy -Existuje veľa rôznych databázových softvérov, ktoré umožňujú ukladať údaje pre tvoje web stránky. My budeme používať predvolenú databázu - `sqlite3`. +Existuje veľa rôznych databázových softvérov, ktoré umožňujú ukladať údaje pre tvoje web stránky. My budeme používať predvolenú databázu `sqlite3`. Tá je už nastavená v tejto časti súboru `mysite/settings.py`: @@ -122,24 +168,24 @@ Tá je už nastavená v tejto časti súboru `mysite/settings.py`: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + 'NAME': BASE_DIR / 'db.sqlite3', } } ``` -Databázu pre náš blog vytvoríme spustením tohto príkazu v konzole: `python manage.py migrate` (musíme byť v adresári `djangogirls`, ktorý obsahuje súbor `manage.py`). Ak všetko prešlo dobre, mala by si vidieť niečo takéto: +Databázu pre náš blog vytvoríme spustením tohto príkazu v konzole: `python manage.py migrate` (musíme byť v priečinku `djangogirls`, ktorý obsahuje súbor `manage.py`). Ak je všetko ok, mala by si vidieť niečo takéto: {% filename %}command-line{% endfilename %} (myvenv) ~/djangogirls$ python manage.py migrate Operations to perform: - Apply all migrations: auth, admin, contenttypes, sessions + Apply all migrations: admin, auth, contenttypes, sessions Running migrations: - Rendering model states... DONE Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK + Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK @@ -147,14 +193,19 @@ Databázu pre náš blog vytvoríme spustením tohto príkazu v konzole: `python Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK + Applying auth.0008_alter_user_username_max_length... OK + Applying auth.0009_alter_user_last_name_max_length... OK + Applying auth.0010_alter_group_name_max_length... OK + Applying auth.0011_update_proxy_permissions... OK + Applying auth.0012_alter_user_first_name_max_length... OK Applying sessions.0001_initial... OK -A je to! Teraz treba spustiť webový server a uvidíme či je naša web stránka funkčná! +A je to! Teraz treba spustiť webový server a zistiť, či je naša web stránka funkčná! ## Spustenie webového servera -Musíš sa nachádzať v adresári, v ktorom sa nachádza súbor `manage.py` (adresár `djangogirls`). V konzole spustíme webový server zadaním `python manage.py runserver`: +Musíš sa nachádzať v priečinku, v ktorom sa nachádza súbor `manage.py` (adresár `djangogirls`). V konzole spustíme webový server zadaním `python manage.py runserver`: {% filename %}command-line{% endfilename %} @@ -168,6 +219,14 @@ Ak používaš Chromebook, použi nasledovný príkaz: (myvenv) ~/djangogirls$ python manage.py runserver 0.0.0.0:8080 +alebo tento, ak používaš Glitch: + +{% filename %}Glitch.com terminal{% endfilename %} + + $ refresh + + + Ak si vo Windowse a padne ti to s chybovou hláškou `UnicodeDecodeError`, použi namiesto toho tento príkaz: {% filename %}command-line{% endfilename %} @@ -175,28 +234,33 @@ Ak si vo Windowse a padne ti to s chybovou hláškou `UnicodeDecodeError`, použ (myvenv) ~/djangogirls$ python manage.py runserver 0:8000 -Teraz už musíš len skontrolovať, či tvoja web stránka funguje. Otvor si prehliadač (Firefox, Chrome, Safari, Internet Explorer alebo čokoľvek používaš) a zadaj adresu: +Teraz už musíš len skontrolovať, či tvoja web stránka beží. Otvor si prehliadač (Firefox, Chrome, Safari, Internet Explorer alebo čokoľvek používaš) a zadaj adresu: {% filename %}browser{% endfilename %} http://127.0.0.1:8000/ -Ak používaš Chromebook, budeš vždy pristupovať na test server zadaním nasledovnej adresy: +Ak používaš Chromebook alebo Cloud 9, namiesto toho klikni na URL vo vyskakovacom okne, ktoré by sa ti malo objaviť v pravom hornom rohu príkazového okna, kde ti beží web server. Táto URL bude vyzerať nejako takto: {% filename %}browser{% endfilename %} - https://django-girls-.c9users.io + https://.vfs.cloud9.us-west-2.amazonaws.com + + +alebo na Glitchi: + + https://nazov-tvojho-glitch-projektu.glitch.me -Blahoželáme! Práve si vytvorila svoju prvú web stránku, ktorá beží na tvojom webovom serveri. Nie je to úžasné? +Blahoželáme! Práve si vytvorila svoju prvú web stránku, ktorá beží na tvojom webovom serveri! Nie je to úžasné? -![Fungovalo to!](images/it_worked2.png) +![Inštalácia funguje!](images/install_worked.png) -Kým je spustený webový server, nebude možné zadať nové príkazy v príkazovom riadku. Terminál bude akceptovať nový text, ale nebude spúšťať nové príkazy. Je to kvôli tomu, že webový server nerpretržite beží a čaká na prichádzajúce požiadavky (requests). +Treba spomenúť, že v príkazovom okne môže naraz bežať len jeden príkaz, a v príkazovom okne, ktoré si otvorila nedávno, teraz beží tvoj web server. Pokým web server beží a čaká na prichádzajúce požiadavky, terminál ti síce dovolí doň písať, ale nedovolí ti vykonávať príkazy. -> Ako webový server funguje sme si povedali v kapitole **Ako funguje Internet**. +> Ako webový server funguje, sme si povedali v kapitole **Ako funguje internet**. -Ak chceš zadať ďalšie príkazy, kým webový server beží, otvor nové terminálové okno a aktivuj svoj virtualenv. Ak chceš zastaviť webový server, prepni sa späť do okna, v ktorom beží a stlač Ctrl + C súčasne (na Windowse možno budeš musiť stlačiť Ctrl + Break). +Ak chceš spúšťať ďalšie príkazy počas toho, ako beží tvoj web server, treba otvoriť nové terminálové okno a aktivovať svoj virtualenv. Inštrukcie, ako otvoriť nové terminálové okno, nájdeš v [Úvode do príkazového riadku](../intro_to_command_line/README.md). Ak chceš webový server zastaviť, prepni sa späť do okna, v ktorom beží, a stlač Ctrl + C súčasne (na Windowse možno budeš musiť stlačiť Ctrl + Break). -Pripravená na ďalší krok? Je na čase vytvoriť nejaký obsah! \ No newline at end of file +Pripravená na ďalší krok? Prišiel čas vytvoriť nejaký obsah! \ No newline at end of file diff --git a/sk/django_templates/README.md b/sk/django_templates/README.md old mode 100755 new mode 100644 index 98d448383ac..e726ad98739 --- a/sk/django_templates/README.md +++ b/sk/django_templates/README.md @@ -1,16 +1,16 @@ -# Šablóny Django +# Django šablóny -Je na čase zobraziť nejaké údaje! Na to nám Django ponúka užitočné vstavané **šablónové tagy**. +Prišiel čas zobraziť nejaké údaje! Na to nám Django ponúka užitočné zabudované **šablónové tagy**. ## Čo sú to šablónové tagy? -V HTML vlastne nemôžeš písať Pythonský kód, pretože prehliadače mu nerozumejú. Poznajú len HTML. Vieme, že HTML je skôr statické, kým Python je oveľa dynamickejší. +Totiž, v HTML nemôžeš písať pythonový kód, pretože prehliadače mu nerozumejú. Poznajú len HTML. Vieme, že HTML je skôr statické, kým Python je oveľa dynamickejší. -**Šablónové tagy v Djangu** nám umožňujú previesť Pythonovské veci do HTML, takže dynamické webové stránky môžeš vytvoriť rýchlejšie. Paráda! +**Šablónové tagy v Djangu** nám umožňujú previesť pythonové veci do HTML, takže dynamické webové stránky môžeš vytvoriť rýchlejšie. Paráda! -## Zobraz šablónu so zoznamom príspevkov +## Zobrazenie šablóny so zoznamom príspevkov -V predchádzajúcej kapitole sme našej šablóne dali zoznam príspevkov v premennej `posts`. Teraz to zobrazíme v HTML. +V predchádzajúcej kapitole sme našej šablóne dali zoznam príspevkov v premennej `posts`. Teraz ich zobrazíme v HTML. Na vypísanie premennej v Django šablónach použijeme dvojitú zloženú zátvorku s názvom premennej vo vnútri, asi takto: @@ -20,7 +20,7 @@ Na vypísanie premennej v Django šablónach použijeme dvojitú zloženú zátv {{ posts }} ``` -Vyskúšaj to vo svojej šablóne `blog/templates/blog/post_list.html`. Nahraď všetko od druhého `
` po tretí `
` týmto kódom: `{{ posts }}`. Ulož súbor a obnov stránku, aby si videla výsledky: +Vyskúšaj to vo svojej šablóne `blog/templates/blog/post_list.html`. Otvor ju vo svojom editore a nahraď elementy `
` týmto: `{{ posts }}`. Ulož súbor a obnov stránku, aby si videla výsledky: ![Obrázok 13.1](images/step1.png) @@ -32,7 +32,7 @@ Ako vidíš, dostali sme len toto: , ]> ``` -To znamená, že to Django chápe ako zoznam objektov. Pamätáš si z kapitoly **Úvod do Pythonu** ako môžeme zobraziť zoznamy? Áno, cyklami! V Django šablóne ich urobíš takto: +To znamená, že to Django chápe ako zoznam objektov. Pamätáš si z kapitoly **Úvod do jazyka Python**, ako môžeme zobraziť zoznamy? Áno, cyklami! V Django šablóne ich urobíš takto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} @@ -46,21 +46,21 @@ Vyskúšaj si to vo svojej šablóne. ![Obrázok 13.2](images/step2.png) -Funguje to! Ale my chceme, aby sa príspevky zobrazili ako tie statické, ktoré sme vytvorili predtým v kapitole **Úvod do HTML**. Môžeš skombinovať HTML a šablónové tagy. Naše `body` bude vyzerať takto: +Funguje to! Ale my chceme, aby sa príspevky zobrazili ako tie statické, ktoré sme vytvorili predtým v kapitole **Úvod do HTML**. HTML a šablónové tagy možno kombinovať. Naše `body` bude vyzerať takto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html - + {% for post in posts %} -
-

published: {{ post.published_date }}

-

{{ post.title }}

+
+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+
{% endfor %} ``` @@ -68,11 +68,11 @@ Funguje to! Ale my chceme, aby sa príspevky zobrazili ako tie statické, ktoré ![Obrázok 13.3](images/step3.png) -Všimla si si, že sme tentokrát použili trochu iný zápis `{{ post.title }}` alebo `{{ post.text }}`? Pristupujeme k údajom v každom z polí definovanom v našom `Post` modeli. Okrem toho `|linebreaks` preposiela texty príspevkov cez filter, ktorý konvertuje zalomenie riadkov na odstavce. +Všimla si si, že sme tentokrát použili trochu iný zápis (`{{ post.title }}` alebo `{{ post.text }}`)? Pristupujeme k údajom v každom z polí definovanom v našom modeli `Post`. Okrem toho, `|linebreaksbr` preposiela texty príspevkov cez filter, ktorý mení zalomenia riadkov na odstavce. ## Ešte jedna vec -Bolo by fajn vidieť či bude tvoja web stránka stále funkčná aj na Internete, však? Skúsme to znova nasadiť na PythonAnywhere. Tu je rekapitulácia postupu… +Bolo by fajn vidieť, či bude tvoja web stránka stále funkčná aj na internete, však? Skúsme ju znova nasadiť na PythonAnywhere. Tu je rekapitulácia postupu… * Najskôr pošli svoj kód na GitHub @@ -80,7 +80,7 @@ Bolo by fajn vidieť či bude tvoja web stránka stále funkčná aj na Internet $ git status [...] - $ git add --all . + $ git add . $ git status [...] $ git commit -m "Modified templates to display posts from database." @@ -92,15 +92,17 @@ Bolo by fajn vidieť či bude tvoja web stránka stále funkčná aj na Internet {% filename %}PythonAnywhere command-line{% endfilename %} - $ cd my-first-blog + $ cd .pythonanywhere.com $ git pull [...] -* A nakoniec prejdi na [záložku Web](https://www.pythonanywhere.com/web_app_setup/) a stlač **Reload** na svojej webovej aplikácii. Aktualizácia by mala byť online! Ak sa blogové príspevky na tvojej PythonAnywhere stránke nezhodujú s príspevkami na blogu ktorý beží na tvojom lokálnom počítači, to je v poriadku. Databázy na tvojom lokálnom počítači a na PythonAnywhere sa nesznchronizujú spolu so zvyšnými subormi. +(Nezabudni nahradiť `` svojou subdoménou na PythonAnywhere bez špicatých zátvoriek.) -Gratulujeme! Teraz skús pridať nový príspevok cez Django admin (nezabudni pridať published_date!). Uisti sa, že si v Django admin prostredi na svojej stránke na PythonAnywhere, https://yourname.pythonanywhere.com/admin. Následne obnov stránku aby si zistila či sa príspevok tam objaví. +* A nakoniec prejdi na [záložku Web](https://www.pythonanywhere.com/web_app_setup/) a stlač **Reload** na svojej webovej aplikácii. (Ak sa chceš dostať k ďalším stránkam na PythonAnywhere z konzoly, použi tlačítko v menu v pravom hornom rohu.) Tvoje zmeny by mali byť online na https://subdomena.pythonanywhere.com - over si to vo svojom prehliadači! Pokiaľ sa blogové príspevky na tvojej PythonAnywhere stránke nezhodujú s príspevkami na blogu, ktorý beží na tvojom lokálnom serveri, to je v poriadku. Databázy na tvojom lokálnom počítači a na PythonAnywhere sa nesynchronizujú spolu s tvojimi ostatnými súbormi. -Funguje ako hodinky? Sme hrdí! Teraz si na chvíľku oddýchni od počítača, zaslúžiš si prestávku. :) +Gratulujeme! Teraz skús pridať nový príspevok cez Django admina (nezabudni pridať published_date!). Uisti sa, že si v Django admin prostredí na svojej stránke na PythonAnywhere, https://subdomena.pythonanywhere.com/admin. Následne obnov stránku, aby si zistila, či sa tam príspevok objaví. + +Funguje ako hodinky? Tešíme sa! Teraz si na chvíľku oddýchni od počítača, zaslúžiš si prestávku. :) ![Obrázok 13.4](images/donut.png) \ No newline at end of file diff --git a/sk/django_urls/README.md b/sk/django_urls/README.md old mode 100755 new mode 100644 index 78f9a0c254e..93bfc909581 --- a/sk/django_urls/README.md +++ b/sk/django_urls/README.md @@ -1,14 +1,14 @@ # Django URL -Chystáme sa vytvoriť našu prvú webovú stránku: domovská stránka tvojho blogu! Ale ešte predtým sa poďme naučiť niečo o Django URL. +Chystáme sa vytvoriť našu prvú webovú stránku: domovskú stránka tvojho blogu! Ale ešte predtým sa poďme naučiť niečo o Django URL. ## Čo je URL? -URL je jednoducho povedané webová adresa. URL si môžeš všimnúť zakaždým, keď navštíviš webovú stránku - vidno ju v prehliadači. (Áno! `127.0.0.1:8000` je URL! A `https://djangogirls.org` je tiež URL.) +URL je webová adresa. URL si môžeš všimnúť zakaždým, keď navštíviš webovú stránku - vidno ju v prehliadači. (Áno! `127.0.0.1:8000` je URL! A `https://djangogirls.org` je tiež URL.) -![Url](images/url.png) +![URL](images/url.png) -Každá stránka na internete potrebuje svoju vlastnú URL. Týmto spôsobom aplikácia vie, čo by mala ukázať užívateľovi, ktorý otvorí URL. V Djangu používame takzvaný `URLconf` (URL konfigurácia). URLconf je súbor vzorov, ktoré sa Django pokúsi priradiť podľa prijatej URL, aby tak našiel správne zobrazenie. +Každá stránka na internete potrebuje svoju vlastnú URL. Tak aplikácia vie, čo by mala ukázať užívateľke či užívateľovi, ktorý otvorí URL. V Djangu používame takzvaný `URLconf` (URL konfiguráciu). URLconf je súbor vzorov, ktoré sa Django pokúsi porovnať s prijatou URL, aby tak našiel správny view. ## Ako fungujú URL v Djangu? @@ -21,50 +21,27 @@ Otvorme súbor `mysite/urls.py` v editore kódu a pozrime sa, ako vyzerá: [...] """ -from django.conf.urls import url from django.contrib import admin +from django.urls import path urlpatterns = [ - url(r'^admin/', admin.site.urls), + path('admin/', admin.site.urls), ] ``` -Ako vidíš, Django sem už pre nás niečo umiestnil. +Ako vidíš, Django sem už pre nás niečo umiestnilo. -Riadky medzi trojitými uvodzovkami (`'''` or `"""`) sa nazývajú docstringy - môžeš ich pridať na začiatku suboru, triedy, alebo metódy aby si popísala čo robí. Python ich nespustí. +Riadky medzi trojitými uvodzovkami (`'''` or `"""`) sa nazývajú docstringy - môžeš ich pridať na začiatku súboru, triedy alebo metódy, aby si popísala, čo robí. Python ich nebude spúšťať. -Adminovská URL, ktorú si navštívila v predchádzajúcej kapitole je už tu: +Adminovská URL, ktorú si navštívila v predchádzajúcej kapitole, je už tu: {% filename %}mysite/urls.py{% endfilename %} ```python - url(r'^admin/', admin.site.urls), + path('admin/', admin.site.urls), ``` -Tento riadok znamená, že pre každú URL, ktorá začína na `admin` Django nájde zodpovedajúce *zobrazenie (view)*. V tomto prípade pridávame množstvo adminovských URL, takže to nie je všetko natlačené v jednom malom súbore -- je to čitateľnejšie a čistejšie. - -## Regex - -Zaujíma ťa, ako Django porovnáva URL so zobrazeniami? No, táto časť je trochu zložitejšia. Django používa `regex`, čo je skratka pre "regulárne výrazy". Regex má veľa (veľa!) pravidiel, ktoré tvoria vyhľadávací vzor. Keďže regexy sú pokročilá téma, nebudeme sa nimi veľmi detailne zaoberať. - -Ak chceš porozumieť tvorbe vzorov, tu je príklad postupu - budeme potrebovať iba obmedzenú množinu pravidiel, ktorými zapíšeme vzor, ktorý hľadáme, konkrétne: - -* `^` znamená začiatok textu -* `$` znamená koniec textu -* `\d` znamená číslica -* `+` znamená, že predchádzajúci prvok sa má opakovať aspon jeden krát -* `()` znamená, že chceme zachytiť časť vzoru - -Všetko ostatné v definícii URL bude brané doslovne. - -Teraz si predstav, že máš webovú stránky s adresou napríklad `http://www.mysite.com/post/12345/`, kde `12345` je číslo tvojho postu. - -Písať samostatné zobrazenia pre všetky čísla postov by bolo naozaj otravné. Pomocou regulárnych výrazov však vieme vytvoriť vzor, ktorý bude zodpovedať URL a vytiahnuť z nej číslo, ktoré potrebujeme: `^post/(\d+)/$`. Rozoberme si to na drobné, aby sme videli, čo sa tu vlastne deje: - -* **^post/** hovorí Djangu, aby zobral čokoľvek, čo má na začiatku URL `post` (hneď po `^`) -* **(\d+)** znamená, že tam bude číslo (jedna alebo viac číslic) a že chceme číslo zachytiť a vytiahnuť -* **/** povie Djangu, že bude nasledovať ďalší znak `/` -* **$** potom označuje koniec adresy URL, čo znamená, že vzoru budú zodpovedať iba reťazce s `/` na konci +Tento riadok znamená, že pre každú URL, ktorá začína na `admin`, Django nájde zodpovedajúci *view*. V tomto prípade pridávame množstvo adminovských URL, takže to nie je všetko natlačené v jednom malom súbore - je to čitateľnejšie a čistejšie. ## Tvoja prvá Django URL! @@ -72,58 +49,67 @@ Je čas vytvoriť našu prvú URL! Chceme, aby 'http://127.0.0.1:8000/' bola dom Tiež chceme udržiavať súbor `mysite/urls.py` čistý, takže naimportujeme URL z našej aplikácie `blog` do hlavného súboru `mysite/urls.py`. -Tak do toho, pridaj riadok čo importuje `blog.urls`. Všimni si, že používame funkciu `include` takže ju budeš musieť taktiež importovať. +Poď na to, pridaj riadok, ktorý naimportuje `blog.urls`. Budeš tiež musieť zmeniť riadok `from django.urls…`, pretože v súbore chceme používať funkciu `include`, takže ju musíme pridať k importom. Súbor `mysite/urls.py` by mal teraz vyzerať takto: {% filename %}mysite/urls.py{% endfilename %} ```python -from django.conf.urls import include -from django.conf.urls import url from django.contrib import admin +from django.urls import path, include urlpatterns = [ - url(r'^admin/', admin.site.urls), - url(r'', include('blog.urls')), + path('admin/', admin.site.urls), + path('', include('blog.urls')), ] ``` -Django teraz presmeruje všetko, čo prichádza na 'http://127.0.0.1:8000/' do `blog.urls` a tam bude hľadať ďalšie inštrukcie. - -Pri písaní regulárnych výrazov je vždy dobré pridať pred reťazec `r`. To je užitočný tip pre Python, že reťazec môže obsahovať špeciálne znaky, ktoré nie sú urečené pre Python samotný, ale pre regulárny výraz. +Django teraz presmeruje všetko, čo prichádza na 'http://127.0.0.1:8000/', do `blog.urls` a tam bude hľadať ďalšie inštrukcie. ## blog.urls -Vytvor nový prázdny súbor s názvom `urls.py` v priečinku `blog`. Dobre! Pridaj tieto dva riadky: +Vytvor nový prázdny súbor s názvom `urls.py` v priečinku `blog` a otvor ho v editore. Okej! Pridaj tieto prvé dva riadky: {% filename %}blog/urls.py{% endfilename %} ```python -from django.conf.urls import url +from django.urls import path from . import views ``` -Tu iba importujeme Django metódu `url` a všetky naše `views` z aplikácie `blog` (zatiaľ žiadne nemáme, ale k tomu sa o chvíľu dostaneme!) +Tu iba importujeme Django metódu `path` a všetky naše `viewy` z aplikácie `blog` (zatiaľ žiadne nemáme, ale k tomu sa o chvíľu dostaneme!) -Následne, môžeme pridať náš prvý URL vzor: +Potom môžeme pridať náš prvý URL vzor: {% filename %}blog/urls.py{% endfilename %} ```python urlpatterns = [ - url(r'^$', views.post_list, name='post_list'), + path('', views.post_list, name='post_list'), ] ``` -Ako vidíš, priradili sme `view` s názvom `post_list` tejto URL: `^$`. Tento regulárny výraz sa bude zhodovať iba ak po `^` (začiatku) bude nasledovať `$` (koniec) - takže zodpovedať bude iba prázdny reťazec. To je správne, pretože v Django URL prekladači 'http://127.0.0.1:8000/' nie je súčasťou URL. Tento vzor povie Djangu, že `views.post_list` je to správne miesto, kam treba ísť, ak niekto vstúpi na stránku cez adresu 'http://127.0.0.1:8000/'. +Ako vidíš, priradili sme základnej URL `view` pod názvom `post_list`. Takýto URL vzor zaberie na prázdny string a Django URL resolver bude ignorovať meno domény (teda http://127.0.0.1:8000/), ktorá predchádza celej URL ceste. Tento vzor hovorí Djangu, že ak niekto vstúpi na tvoju stránku na adrese "http://127.0.0.1:8000/", má sa oňho postarať `views.post_list`. + +Posledná časť `name='post_list'` je názov URL, ktorý sa použije na identifikáciu správneho viewu. Názov URL môže byť rovnaký ako názov viewu, ale pokojne to môže byť aj niečo úplne iné. Neskôr budeme v projekte používať pomenované URL, takže je dôležité pomenovať všetky URL v aplikácii. Názvy by mali byť unikátne a ľahké na zapamätanie. -Posledná časť `name='post_list'` je názov URL, ktorý sa použije na identifikáciu zobrazenia. Názov môže byť rovnaký ako názov zobrazenia, ale pokojne to môže byť aj niečo úplne iné. Neskôr budeme v projekte používať pomenované URL, takže je dôležité pomenovať všetky URL v aplikácii. Názvy by mali byť unikátne a ľahké na zapamätanie. +Ak sa teraz pokúsiš navštiviť http://127.0.0.1:8000/, uvidíš správu, že stránka nie je dostupná ("web page not available"). Toto je z toho dôvodu, že server (spomínaš si, ako si spúšťala `runserver`?) už nebeží. Pozri sa na konzolu svojho serveru, aby si zistila prečo. -Ak sa teraz pokúsiš navštiviť http://127.0.0.1:8000/ uvidíš správu, že stránka nie je dostupná ('web page not available'). Toto je z toho dôvodu že server (spomínaš si keď si spúšťala `runserver`?) už nebeží. Pozri sa na konzolu svojho serveru, aby si zistila prečo. +{% filename %}{{ warning_icon }} command-line{% endfilename %} -![Chyba](images/error1.png) + return _bootstrap._gcd_import(name[level:], package, level) + File "", line 1030, in _gcd_import + File "", line 1007, in _find_and_load + File "", line 986, in _find_and_load_unlocked + File "", line 680, in _load_unlocked + File "", line 850, in exec_module + File "", line 228, in _call_with_frames_removed + File "/Users/ola/djangogirls/blog/urls.py", line 5, in + path('', views.post_list, name='post_list'), + AttributeError: module 'blog.views' has no attribute 'post_list' + -Konzola zobrazuje chybu, ale neboj sa - je to pomerne užitočné: hovorí ti, že neexistuje atribút post_list (**no attribute 'post_list'**). To je názov *view*, ktorý sa Django pokúša nájsť a použiť, ale sme ho ešte nevytvorili. V tejto fáze `/admin/` tiež nefunguje. Žiadne obavy, aj k tomu sa dostaneme. +Konzola zobrazuje chybu, ale neboj sa - je to práveže nápomocné: hovorí ti, že neexistuje atribút post_list (**no attribute 'post_list'**). To je názov *viewu*, ktorý sa Django pokúša nájsť a použiť, ale my sme ho ešte nevytvorili. V tejto fáze `/admin/` tiež nefunguje. Žiadne obavy, aj k tomu sa dostaneme. Ak vidíš inú chybovú hlášku, skúš reštartovať web server. To môžeš docieliť tak, že v príkazovom okne, kde beží tvoj web server, stlačíš Ctrl + C (klávesy Control a C) naraz. Na Windowse možno bude treba stlačiť Ctrl + Break. Svoj web server potom znova spustíš príkazom `python manage.py runserver`. -> Ak chceš vedieť viac o Django URLconfs, pozri sa na oficiálnu dokumentáciu: https://docs.djangoproject.com/en/1.11/topics/http/urls/ \ No newline at end of file +> Ak chceš vedieť viac o Django URL konfigurácii, pozri sa na oficiálnu dokumentáciu: https://docs.djangoproject.com/en/3.2/topics/http/urls/ \ No newline at end of file diff --git a/sk/django_views/README.md b/sk/django_views/README.md old mode 100755 new mode 100644 index 5fdb75edc92..b3c2bc100b6 --- a/sk/django_views/README.md +++ b/sk/django_views/README.md @@ -1,14 +1,14 @@ -# Django views - čas tvoriť! +# Django viewy - čas tvoriť! Je čas zbaviť sa toho bugu, čo sme vytvorili v poslednej kapitole! :) -*View* je miesto, kam dávame "logiku" našej aplikácie. Bude požadovať informáciu z `modelu`, ktorý si už vytvorila a pošle to do `šablóny`. Šablónu (template) budeme vytvárať v nasledujúcej kapitole. Views sú vlastne len metódy Pythonu, ktoré sú trochu zložitejšie, ako tie, ktoré sme písali v kapitole **Úvod do Pythonu**. +*View* je miesto, kam dávame "logiku" našej aplikácie. Bude požadovať dáta z `modelu`, ktorý si už vytvorila, a pošle ich `šablóne`. Šablónu budeme vytvárať v nasledujúcej kapitole. Viewy sú vlastne len metódy Pythonu, ktoré sú trochu zložitejšie, ako tie, ktoré sme písali v kapitole **Úvod do jazyka Python**. -Views sú umiestnené v súbore `views.py`. Naše *views* budeme pridávať do súboru `blog/views.py`. +Viewy sú umiestnené v súbore `views.py`. Naše *viewy* budeme pridávať do súboru `blog/views.py`. ## blog/views.py -OK, otvorme tento súbor a pozrime sa, čo je v ňom: +OK, otvorme tento súbor v editore a pozrime sa, čo je v ňom: {% filename %}blog/views.py{% endfilename %} @@ -18,11 +18,11 @@ from django.shortcuts import render # Create your views here. ``` -Je tu toho málo zatiaľ. +Zatiaľ je tu toho málo. -Ako si spomínaš riadky začínajúce s `#` sú komentáre - to znamená, že ich Python nespustí. +Ak si spomínaš, riadky začínajúce `#` sú komentáre - to znamená, že ich Python nespustí. -Vytvorme *view* ako nám komentár naznačuje. Pridaj nasledovný minimálny view pod komentárom: +Vytvorme *view*, ako nám komentár naznačuje. Pridaj pod komentár nasledovný minimálny view: {% filename %}blog/views.py{% endfilename %} @@ -31,14 +31,14 @@ def post_list(request): return render(request, 'blog/post_list.html', {}) ``` -Ako vidíš, vytvorili sme funkciu (`def`) nazvanú `post_list`, ktorá použije `request` (žiadosť) a `return` (vráti) metódu `render`, ktorá vytvorí (spojí dokopy) našu šablónu `blog/post_list.html`. +Ako vidíš, vytvorili sme funkciu (`def`) nazvanú `post_list`, ktorá použije `request` (žiadosť) a `return` (vráti) metódu `render`, ktorá vyplní (vyrenderuje) našu šablónu `blog/post_list.html`. -Ulož súbor a prejdi na http://127.0.0.1:8000 / a pozri sa, čo sa udeje. +Ulož súbor, prejdi na http://127.0.0.1:8000/ a pozri sa, čo sa udeje. Ďalšia chyba! Prečítaj si, o čo ide tentokrát: ![Chyba](images/error.png) -Ukazuje, že server aspoň znovu beží, ale stále to nie je ono, že? Neboj sa, je to len chybová stránka, nič čoho sa treba báť! Podobne ako chyby v konzole, sú vlastne velkom úťitočné. Dočítaš sa, že *TemplateDoesNotExist*. Poďme opraviť túto chybu a vytvoríme šablónu v nasledujúcej kapitole! +Ukazuje, že server aspoň znovu beží, ale nie je to úplne ono, že? Neboj sa, je to len chybová stránka, nič, čoho sa treba báť! Podobne ako chyby v konzole nám tieto chyby napovedajú, čo treba robiť. Dočítaš sa, že *TemplateDoesNotExist* (šablóna neexistuje). Poďme opraviť túto chybu tým, že vytvoríme šablónu v nasledujúcej kapitole! -> Viac informácií o Django views získaš v oficiálnej dokumentácii: https://docs.djangoproject.com/en/1.11/topics/http/views/ \ No newline at end of file +> Viac informácií o Django viewoch získaš v oficiálnej dokumentácii: https://docs.djangoproject.com/en/3.2/topics/http/views/ \ No newline at end of file diff --git a/sk/dynamic_data_in_templates/README.md b/sk/dynamic_data_in_templates/README.md old mode 100755 new mode 100644 index 72923b7bc7f..1d5e46f9c1e --- a/sk/dynamic_data_in_templates/README.md +++ b/sk/dynamic_data_in_templates/README.md @@ -1,12 +1,12 @@ # Dynamické dáta v šablónach -Máme rozdielne kúsky na svojom mieste: `Post` model je definovaný v `models.py`, máme `post_list` v `views.py` a pridanú šablónu. Ale ako prinútime HTML šablónu, aby zobrazovala náš príspevok? Pretože to je to, čo chceme urobiť - vziať nejaký obsah (modely uložené v databáze) a zobraziť ich pekne v našej šablóne, že? +Niekoľko vecí už máme na svojom mieste: model `Post` je definovaný v `models.py`, máme `post_list` v `views.py` a pridanú šablónu. Ale ako vlastne prinútime HTML šablónu, aby zobrazila naše príspevky? Pretože to je to, čo chceme urobiť - vziať nejaký obsah (modely uložené v databáze) a zobraziť ich pekne v našej šablóne, že? -To je presne to, čo majú *views* robiť: spojiť modely a šablóny. V našom `post_list` *view* potrebujeme vziať modely ktoré chceme zobraziť a posunúť ich do šablóny. Takže sa rozhodneme vo *view* čo (model) bude zobrazené v šablóne. +To je presne to, čo majú robiť *viewy*: spájať modely a šablóny. V našom *viewe* `post_list` potrebujeme vziať modely, ktoré chceme zobraziť, a posunúť ich šablóne. Čiže vo *viewe* sa rozhodne, čo (resp. ktorý model) bude zobrazené v šablóne. Dobre, takže ako toto dosiahneme? -Musíme otvoriť náš `blog/views.py`. Zatiaľ `post_list` *view* vyzerá takto: +Musíme otvoriť náš `blog/views.py` v editore. Zatiaľ *view* `post_list` vyzerá takto: {% filename %}blog/views.py{% endfilename %} @@ -17,7 +17,7 @@ def post_list(request): return render(request, 'blog/post_list.html', {}) ``` -Pamätáš si, keď sme rozprávali o zahrnutí kódu napísanom v rozdielnych súboroch? Teraz nastal čas kedy musíme zahrnúť model, ktorý sme napísali v `models.py`. Pridáme tento riadok `from .models import Post` takto: +Pamätáš si, keď sme sa rozprávali o vložení kódu napísaného v rozdielnych súboroch? Teraz nastal čas, kedy musíme vložiť model, ktorý sme napísali v `models.py`. Pridáme riadok `from .models import Post` takto: {% filename %}blog/views.py{% endfilename %} @@ -26,15 +26,15 @@ from django.shortcuts import render from .models import Post ``` -Bodka za `from` znamená *aktuálna zložka* alebo *aktuálna aplikácia*. `views.py` aj `models.py` sú v rovnakom adresári. To znamená, že môžeme použiť `.` a názov súboru (bez `.py`). Potom importujeme názov modelu (`Post`). +Bodka za `from` znamená *aktuálny priečinok* alebo *aktuálna aplikácia*. `views.py` aj `models.py` sú v rovnakom priečinku. To znamená, že môžeme použiť `.` a názov súboru (bez `.py`). Potom naimportujeme názov modelu (`Post`). -Ale čo ďalej? Na to aby sme boli schopní vziať konkrétny príspevok blogu z `Post` modelu potrebujeme niečo, čo sa volá `QuerySet`. +Ale čo ďalej? Na to, aby sme mohli zobrať konkrétny príspevok blogu z `Post` modelu, potrebujeme niečo, čo sa volá `QuerySet`. ## QuerySet -Už by si mala vedieť ako funguje QuerySets. Hovorili sme o tom v kapitole [Django ORM (QuerySets)](../django_orm/README.md). +Už by si mala vedieť, ako fungujú QuerySety. Hovorili sme o tom v kapitole [Django ORM (QuerySety)](../django_orm/README.md). -Takže teraz chceme zoznam príspevkov, ktoré sú uverejnené a zoradené podľa `published_date`, však? To sme už spravili v kapitole QuerySets! +Takže teraz chceme zoznam zverejnených príspevkov, ktoré sú zoradené podľa `published_date`, však? To sme už spravili v kapitole QuerySety! {% filename %}blog/views.py{% endfilename %} @@ -42,7 +42,7 @@ Takže teraz chceme zoznam príspevkov, ktoré sú uverejnené a zoradené podľ Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date') ``` -Teraz vložíme tento kus kódu do súboru `blog/views.py` pridaním funkcie `def post_list(request)`, ale nezabudni najprv pridať `from django.utils import timezone`: +Takže poďme otvoriť súbor `blog/views.py` v našom editore a pridajme tento kus kódu do funkcie `def post_list(request)`, ale nezabudni najprv pridať `from django.utils import timezone`: {% filename %}blog/views.py{% endfilename %} @@ -56,11 +56,14 @@ def post_list(request): return render(request, 'blog/post_list.html', {}) ``` -Posledná chýbajúca časť je predanie `posts` QuerySetu do šablóny. Neboj sa, v nasledujúcej kapitole si ukážeme ako ju zobraziť. +Ak chceme zobraziť náš QuerySet v našom zozname blog postov, ešte nám zostáva urobiť dve veci: -Vezmi prosím na vedomie, že vytvárame *premennú* pre náš QuerySet: `posts`. Považuj to za meno nášho QuerySetu. Odteraz ho môžeme referovať pod týmto menom. +1. Poslať náš QuerySet `posts` šablóne tak, že zmeníme, ako voláme funkciu `render`. To spravíme teraz. +2. Upraviť šablónu, aby nám zobrazila náš QuerySet `posts`. K tomuto sa dostaneme v neskoršej kapitole. -V `render` funkcii už máme jeden parameter `request` (všetko čo príjmeme od užívateľa cez Internet) a ďalší ktorý poskytuje súbor šablóny `'blog/post_list.html'`). Posledný parameter, `{}` je miesto na ktoré môžeme dať nejaké veci ktoré môže použiť šablóna. Potrebujeme im dať mená (zatiaľ sa budeme držať `'posts'`). :) Malo by to vyzerať takto: `{'posts': posts}`. Všimni si, že časť pred `:` je reťazec: potrebuješ ju obaliť do úvodzoviek:`"`. +Vezmi, prosím, na vedomie, že vytvárame *premennú* pre náš QuerySet: `posts`. Ber to ako meno nášho QuerySetu. Odteraz mu môžeme hovoriť týmto menom. + +Vo funkcii `render` už máme jeden parameter `request` (všetko, čo príjmeme od užívateľa či užívateľky cez internet) a ďalší, ktorý hovorí, ktorú šablónu použiť (`'blog/post_list.html'`). Posledný parameter, `{}`, je miestom, kam môžeme pridať veci, ktoré chceme poslať našej šablóne. Potrebujeme im dať mená (zatiaľ sa budeme držať `'posts'`). :) Malo by to vyzerať takto: `{'posts': posts}`. Všimni si, že časť pred `:` je reťazec: potrebuješ ju obaliť do úvodzoviek:`"`. Nakoniec by náš súbor `blog/views.py` mal vyzerať takto: @@ -78,4 +81,4 @@ def post_list(request): To je všetko! Čas prejsť na našu šablónu a zobraziť tento QuerySet! -Pokiaľ si chceš prečítať niečo viac o QuerySets v Djangu mala by si sa pozrieť sem: https://docs.djangoproject.com/en/1.11/ref/models/querysets/ \ No newline at end of file +Pokiaľ si chceš prečítať niečo viac o QuerySetoch v Djangu, mala by si sa pozrieť sem: https://docs.djangoproject.com/en/3.2/ref/models/querysets/ \ No newline at end of file diff --git a/sk/extend_your_application/README.md b/sk/extend_your_application/README.md old mode 100755 new mode 100644 index dbed9f21542..0f93c6b6255 --- a/sk/extend_your_application/README.md +++ b/sk/extend_your_application/README.md @@ -1,114 +1,126 @@ +{% set warning_icon = '' %} + # Ako rozšíriť aplikáciu -Už sme dokončili všetky kroky potrebné k tomu, aby sme vytvorili našu webovú stránku: vieme ako napísať model, url, view a šablónu. Taktiež vieme ako spraviť našu stránku peknú. +Už sme dokončili všetky kroky potrebné k tomu, aby sme vytvorili našu webovú stránku: vieme, ako napísať model, URL, view a šablónu. Taktiež vieme, ako našu stránku skrášliť. Čas na precvičovanie! -Prvá vec, ktorú potrebujeme na našom blogu je, zjavne, stránka, na ktorej zobrazíme jeden príspevok, že? +Prvá vec, ktorú na našom blogu potrebujeme, je podstránka, ktorá zobrazí iba jeden príspevok, že? -Už máme `Post` model, takže nepotrebujeme do `models.py` pridávať nič iné. +Už máme model `Post`, takže nepotrebujeme do `models.py` pridávať nič nové. -## Vytvorenie šablóny odkazu na post detail +## Vytvorenie odkazu na detail príspevku -Začneme s pridaním odkazu v `blog/templates/blog/post_list.html` súbore. Zatiaľ by mal vyzerať takto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} +Začneme tak, že pridáme link do súboru `blog/templates/blog/post_list.html`. Otvor ho vo svojom editore. Zatiaľ by mal vyzerať takto nejako: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html {% extends 'blog/base.html' %} {% block content %} {% for post in posts %} -
-
+
+
-

{{ post.title }}

+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} {% endblock %} ``` -{% raw %}Chceme, aby link z titulku príspevku smeroval na stránku detailov príspevku. Zmeňme `

{{ post.title }}

` tak, aby odkazoval na stránku detailu príspevku:{% endraw %} +{% raw %}Chceme, aby link z titulku príspevku smeroval na stránku s detailami príspevku. Zmeňme `

{{ post.title }}

` tak, aby odkazoval na stránku detailu príspevku:{% endraw %} -{% filename %}blog/templates/blog/post_list.html{% endfilename %} +{% filename %}{{ warning_icon }} blog/templates/blog/post_list.html{% endfilename %} ```html -

{{ post.title }}

+

{{ post.title }}

``` -{% raw %}Je na čase vysvetliť záhadné `{% url 'post_detail' pk=post.pk %}`. Ako možno tušíš, `{% %}` notácia znamená, že používame tagy Django šablóny. Tentoraz použijeme jeden, ktorý pre nás vytvorí URL!{% endraw %} +{% raw %}Nadišiel čas vysvetliť si tento záhadný zápis: `{% url 'post_detail' pk=post.pk %}`. Ako možno tušíš, notácia `{% %}` znamená, že používame tagy Django šablóny. Tentoraz použijeme jeden, ktorý pre nás vytvorí URL!{% endraw %} -`post_detail` časť znamená, že Django bude očakávať URL v `blog/urls.py` s name=post_detail +Časť `post_detail` znamená, že Django bude očakávať URL v `blog/urls.py`, pre ktorú platí name=post_detail -A čo s `pk=post.pk`? `pk` je skratka pre primárny kľúč, ktorý jednoznačne určuje každý záznam v databáze. Keďže sme neurčili primárny kľúč v našom `Post` modely, Django ho vytvorí namiesto nás (štandardne je to číslo ktoré sa zvýši o jedna pre každý záznam, t.j. 1, 2, 3) a pridá ho ako pole s názvom `pk` ku každému z našich príspevkov. K primárny kľúču môžeme pristupovať napísaním `post.pk`, rovnako ako pristupujeme iným poliam (`titul`, `autor`, atď) v našom `Post` objekte! +A čo `pk=post.pk`? `pk` je skratka pre primárny kľúč (primary key), ktorý jednoznačne určuje každý konkrétny záznam v databáze. Každý Django model má pole, ktoré slúži ako jeho primárny kľúč. Bez ohľadu na to, ako sa toto pole volá, dá sa naň vždy odkazovať menom "pk". Keďže sme neurčili žiadny primárny kľúč v našom `Post` modeli, Django ho vytvorí za nás (štandardne sa volá "id" a je to číslo, ktoré sa zvyšuje o jedna pre každý záznam, t.j. 1, 2, 3) a pridá ho ako pole ku každému z našich príspevkov. K primárnemu kľúču môžeme pristupovať napísaním `post.pk` rovnako, ako pristupujeme k iným poliam (`title`, `author`, atď.) v našom `Post` objekte! -Teraz keď pôjdeme na: http://127.0.0.1:8000/ uvidíme chybu (ako sa dá očakávať, keďže ešte nemáme URL alebo *view* pre `post_detail`). Bude to vyzerať takto: +Teraz keď pôjdeme na http://127.0.0.1:8000/, uvidíme chybu (ako sa dalo očakávať, keďže ešte nemáme URL alebo *view* pre `post_detail`). Bude to vyzerať takto: -![NoReverseMatch error](images/no_reverse_match2.png) +![Chyba NoReverseMatch](images/no_reverse_match2.png) -## Vytvor URL na detail príspevku +## Vytvorenie URL na detail príspevku -Vytvorme URL v `urls.py` pre náš `post_detail` *view*! +Vytvorme URL v `urls.py` pre náš *view* `post_detail`! -Chceme aby sa detaily nášho prvého príspevku zobrazili na tejto **URL**: http://127.0.0.1:8000/post/1/ +Chceme, aby sa detaily nášho prvého príspevku zobrazili na tejto **URL**: http://127.0.0.1:8000/post/1/ -Vytvorme URL v súbore `blog/urls.py` tak, aby odkazoval Django na *view* nazvaný `post_detail`, ktorý zobrazí celý príspevok blogu. Pridaj riadok `url(r'^post/(?P\d+)/$', views.post_detail, name='post_detail'),` do súboru `blog/urls.py`. Súbor by mal vyzerať takto: +Vytvorme URL v súbore `blog/urls.py` tak, aby odkazovala Django na *view* nazvaný `post_detail`, ktorý zobrazí celý príspevok blogu. Otvor súbor `blog/urls.py` v editore a pridaj doň riadok `path('post//', views.post_detail, name='post_detail'),` tak, aby súbor vyzeral takto: -{% filename %}blog/urls.py{% endfilename %} +{% filename %}{{ warning_icon }} 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'), + path('', views.post_list, name='post_list'), + path('post//', views.post_detail, name='post_detail'), ] ``` -Táto časť `^post/(?P\d+)/$` vyzerá desivo, ale bez obáv - vysvetlíme si: +Časť `post//` definuje vzor URL – vysvetlime si ho: -- začína to opäť s `^` - "začiatok". -- `post/` len znamená, že na začiatku, URL by mala obsahovať slovo **post** a **/**. Zatiaľ všetko v poriadku. -- `(?P\d+)` - táto časť je zložitejšia. Znamená to, že Django vezme všetko, čo tu vložíš a premiestni to do premennej s názvom `pk`. (Všimni si, že to zodpovedá názvu ktorý sme dali primárnemu kľúču v `blog/templates/blog/post_list.html`!) `\d` nám hovorí, že to môže byť iba číslica, nie písmeno (takže všetko od 0 po 9). `+` znamená, že musíme mať aspoň jedno číslo. Takže niečo ako `http://127.0.0.1:8000/post//` nie je validné, ale `http://127.0.0.1:8000/post/1234567890/` je úplne v poriadku! -- `/` – potom potrebujeme **/** ešte raz. -- `$` – "koniec"! +- `post/` znamená, že na začiatku by URL mala obsahovať slovo **post** a **/**. Zatiaľ všetko v poriadku. +- `` – táto časť je trochu záludnejšia. Znamená, že Django očakáva číslo (integer alebo skrátene int) a posunie ho viewu ako premennú pod názvom `pk`. +- `/` – potom potrebujeme znova **/** predtým, ako URL skončí. -To znamená, že ak zadáš `http://127.0.0.1:8000/post/5/` do svojho prehliadača, Django pochopí, že hľadáš *view* s názvom `post_detail` a prenesie informácie z `pk` rovné `5` do toho *view*. +To znamená, že ak zadáš `http://127.0.0.1:8000/post/5/` do svojho prehliadača, Django pochopí, že hľadáš *view* s názvom `post_detail`, a posunie informáciu, že `pk` je `5`, tomuto *viewu*. -OK, pridali sme nový URL vzor `blog/urls.py`! Poďme obnoviť stránku: http://127.0.0.1:8000 / Boom! Server znova prestal bežať. Pozri sa do konzoly - ako sa aj dalo očakávať je tam ďalšia chyba! +OK, pridali sme nový vzor URL do `blog/urls.py`! Poďme obnoviť stránku: http://127.0.0.1:8000 / Bum! Server znova prestal bežať. Pozri sa do konzoly - ako sa aj dalo očakávať, je tam ďalšia chyba! -![AttributeError](images/attribute_error2.png) +{% filename %}{{ warning_icon }} command-line{% endfilename %} -Pamätáš si, čo je ďalší krok? Samozrejme: pridávanie view! + return _bootstrap._gcd_import(name[level:], package, level) + File "", line 1030, in _gcd_import + File "", line 1007, in _find_and_load + File "", line 986, in _find_and_load_unlocked + File "", line 680, in _load_unlocked + File "", line 850, in exec_module + File "", line 228, in _call_with_frames_removed + File "/Users/ola/djangogirls/blog/urls.py", line 6, in + path('post//', views.post_detail, name='post_detail'), + AttributeError: module 'blog.views' has no attribute 'post_detail' + -## Pridaj view do detailu príspevku +Pamätáš si, čo je ďalší krok? Musíme pridať náš nový view! -Tentokrát má náš *view* extra parameter, `pk`. Náš *view* ho potrebuje zachytiť, že? Takže definujeme našu funkciu ako `def post_detail(request, pk):`. Všimni si, že musíme použiť rovnaké meno, ako to, ktoré sme špecifikovali v Url (`pk`). Vynechanie tejto premmenej je nesprávne a bude mať za následok chybu! +## Pridanie viewu pre detaily príspevku -Teraz chceme aby sme dostali jeden a len jeden príspevok blogu. Na to môžeme použiť querysets takto: +Tentokrát má náš *view* extra parameter s názvom `pk`. Náš *view* ho potrebuje zachytiť, však? Takže definujeme našu funkciu ako `def post_detail(request, pk):`. Pozor na to, že tento parameter musí mať presne rovnaký názov, ako sme špecifikovali v `urls` (`pk`). Vynechanie tejto premmenej je nesprávne a bude mať za následok chybu! -{% filename %}blog/views.py{% endfilename %} +Teraz chceme, aby sme dostali jeden jediný príspevok blogu. Na to môžeme použiť querysety, a to takto: + +{% filename %}{{ warning_icon }} blog/views.py{% endfilename %} ```python Post.objects.get(pk=pk) ``` -Ale tento kód má problém. Pokiaľ tu nie je žiaden `Post` s daným `primárnym kľúčom`(`pk`) budeme mať veľmi škaredú chybu! +Ale tento kód má problém. Pokiaľ neexistuje žiaden `Post` s daným `primárnym kľúčom`(`pk`), dostaneme veľmi škaredú chybu! -![DoesNotExist error](images/does_not_exist2.png) +![Chyba DoesNotExist](images/does_not_exist2.png) -To nechceme! Ale samozrejme Django prichádza s niečim, čo si s tým poradí: `get_object_or_404`. V príade, že neexistuje žiaden `Post` s daným `pk` zobrazí oveľa krajšiu stránku, `Page Not Found 404`. +To nechceme! Našťastie Django má zabudované niečo, čo si s tým poradí: `get_object_or_404`. V prípade, že neexistuje žiaden `Post` s daným `pk`, zobrazí oveľa krajšiu stránku, `Page Not Found 404`. -![Page not found](images/404_2.png) +![Stránka nenájdená](images/404_2.png) -Dobrá správa je, že si môžeš vytvoriť svoju vlastnú `Page not found` stránku a spraviť ju tak peknú ako len chceš. Ale to nie je momentálne príliš dôležité, takže to preskočíme. +Dobrá správa je, že si môžeš vytvoriť svoju vlastnú `Page not found` stránku a spraviť ju takú peknú, ako len chceš. Ale to nie je momentálne extra dôležité, takže to preskočíme. -Dobre, čas pridať *view* do nášho `views.py` súboru! +Dobre, čas pridať *view* do nášho súboru `views.py`! -V `blog/urls.py` sme vytvorili URL pravidlo s názvom `post_detail`, ktoré odkazuje na zobrazenies názvom `views.post_detail`. To znamená, že Django očakáva zobrazovaciu funkciu s nazvom `post_detail` v súbore `blog/views.py`. +V `blog/urls.py` sme vytvorili URL pravidlo s názvom `post_detail`, ktoré odkazuje na view s názvom `views.post_detail`. To znamená, že Django očakáva view funkciu s názvom `post_detail` v súbore `blog/views.py`. -Mali by sme otvoriť `blog/views.py` a pridať nasledovný kód ku ostatným `from` riadkom: +Mali by sme otvoriť `blog/views.py` v editore a pridať nasledovný kód k ostatným `from` riadkom: {% filename %}blog/views.py{% endfilename %} @@ -132,15 +144,15 @@ def post_detail(request, pk): Funguje to! Ale čo sa stane, keď klikneš na odkaz v názve príspevku blogu? -![TemplateDoesNotExist error](images/template_does_not_exist2.png) +![Chyba TemplateDoesNotExist](images/template_does_not_exist2.png) -Ale nie! Ďalšia chyba! Ale už vieme, s čim mám dočinenia, že? Potrebujeme pridať šablónu! +Ale nie! Ďalšia chyba! Ale už vieme, s čím máme dočinenia, že? Potrebujeme pridať šablónu! -## Vytvor šablónu pre detaily príspevku +## Vytvorenie šablóny pre detaily príspevku -Vytvoríme súbor v `blog/templates/blog` s názvom `post_detail.html`. +Vytvoríme súbor v `blog/templates/blog` s názvom `post_detail.html` a otvoríme ho v editore. -Bude to vyzerať takto: +Vlož doň nasledujúci kód: {% filename %}blog/templates/blog/post_detail.html{% endfilename %} @@ -148,67 +160,67 @@ Bude to vyzerať takto: {% extends 'blog/base.html' %} {% block content %} -
+
{% if post.published_date %} -
+
+ {% endif %} -

{{ post.title }}

+

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endblock %} ``` -Znova raz rozširujeme `base.html`. V bloku `content` chceme zobraziť published_date príspevku (pokiaľ existuje), titulok a text. Ale mali by sme prebrať pár dôležitých vecí, však? +Opäť raz rozširujeme (extend) `base.html`. V bloku `content` chceme zobraziť published_date príspevku (pokiaľ existuje), titulok a text. Ale mali by sme prebrať pár dôležitých vecí, však? -{% raw %}`{% if ... %} ... {% endif %}` je tag šablóny, ktorý môžeme použiť ak chceme niečo skontrolovať. (Pamätáš si `if ... else ..` z **Úvodu do Pythonu**?) V tomto prípade chceme overiť či `published_date` príspevku nie je prázdny.{% endraw %} +{% raw %}`{% if ... %} ... {% endif %}` je tag šablóny, ktorý môžeme použiť, ak chceme niečo skontrolovať. (Pamätáš si `if ... else ...` z kapitoly **Úvod do jazyka Python**?) V tomto prípade chceme skontrolovať, či pole `published_date` nášho príspevku nie je prázdne.{% endraw %} Dobre, môžeme obnoviť našu stránku a pozrieť sa, či `TemplateDoesNotExist` zmizlo. -![Post detail page](images/post_detail2.png) +![Post detail stránka](images/post_detail2.png) Jupí! Funguje to! # Je čas nasadiť! -Bolo by dobré vedieť, či tvoja stránka stále funguje na PythonAnywhere, že? Pokúsme sa ju znova nasadiť. +Bolo by dobré vedieť, či tvoja stránka stále funguje na PythonAnywhere, však? Pokúsme sa ju znova nasadiť. {% filename %}command-line{% endfilename %} $ git status - $ git add --al . + $ git add . $ git status - $ git commit -m "Pridaný view a šablóna pre detail príspevku blogu a taktiež CSS pre stránku." + $ git commit -m "Pridany view a sablona pre detaily prispevku a taktiez CSS pre stranku" $ git push Potom v [Bash konzole PythonAnywhere](https://www.pythonanywhere.com/consoles/): -{% filename %}command-line{% endfilename %} +{% filename %}PythonAnywhere command-line{% endfilename %} - $ cd ~/.pythonanywhere.com + $ cd ~/.pythonanywhere.com $ git pull [...] -(Nezabudni nahradiť `` svojím uživateľským menom na PythonAnywhere, bez hranatých zátvoriek). +(Nezabudni nahradiť `` svojou subdoménou na PythonAnywhere bez špicatých zátvoriek.) ## Aktualizovanie statických súborov na serveri -Servre ako PythonAnywhere sa ku "statickým súborom" (ako CSS súbory) správajú inak ako ku Python súborom, lebo ich môžu optimalizovať aby ich bolo možné rýchlejšie načítať. Kvôli tomu, keď meníme naše CSS súbory, musíme spustiť ďalší príkaz na servri aby ich akutalizoval. Názov príkazu je `collectstatic`. +Servery ako PythonAnywhere sa ku "statickým súborom" (ako CSS súbory) správajú inak ako ku Python súborom, lebo ich môžu optimalizovať, aby ich bolo možné rýchlejšie načítať. Preto keď meníme naše CSS súbory, musíme spustiť ďalší príkaz na serveri, aby ich aktualizoval. Názov tohto príkazu je `collectstatic`. -Začni spustením virtualenvu, ak už nie je aktívne (PythonAnywhere používa príkaz `workon`, je to presne ako `source myenv/bin/activate` príkaz ktorý si použila na vlastnom počítači): +Začni spustením virtualenvu, ak už nie je aktivovaný (PythonAnywhere používa príkaz `workon`, je to presne ako príkaz `source mojenv/bin/activate`, ktorý si použila na vlastnom počítači): -{% filename %}command-line{% endfilename %} +{% filename %}PythonAnywhere command-line{% endfilename %} - $ workon .pythonanywhere.com + $ workon .pythonanywhere.com (ola.pythonanywhere.com)$ python manage.py collectstatic [...] -`manage.py collectstatic` príkaz sa trochu podobá na `manage.py migrate`. Robíme zmeny v našom kóde a potom povieme Django aby aplikoval (*apply*) tie zmeny, buď na statické súbory na servri, alebo do databázy. +Tento `manage.py collectstatic` príkaz sa trochu podobá na `manage.py migrate`. Urobíme zmeny v našom kóde a potom povieme Djangu, aby aplikovalo (*apply*) dané zmeny buď na statické súbory na serveri, alebo na databázu. -A nakoniec preskoč na [kartu Web](https://www.pythonanywhere.com/web_app_setup/) and klinki na **Reload**. +Každopádne, teraz môžeme prejsť na stránku ["Web"](https://www.pythonanywhere.com/web_app_setup/) (cez menu v pravom hornom rohu konzoly), stlačiť **Reload** a pozrieť sa na náš výsledok na adrese https://subdomena.pythonanywhere.com. -A to by malo byť všetko! Gratulujeme :) \ No newline at end of file +A to by malo byť všetko! Gratulujeme! :) \ No newline at end of file diff --git a/sk/how_the_internet_works/README.md b/sk/how_the_internet_works/README.md old mode 100755 new mode 100644 index 54bec2f4232..c879f62ccb4 --- a/sk/how_the_internet_works/README.md +++ b/sk/how_the_internet_works/README.md @@ -1,47 +1,47 @@ -# Ako funguje Internet +# Ako funguje internet -> Pre čitateľov doma: Táto kapitola je spracovaná v [How the Internet Works](https://www.youtube.com/watch?v=oM9yAA09wdc) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [How the Internet Works](https://www.youtube.com/watch?v=oM9yAA09wdc). > > Táto kapitola je inšpirovaná prednáškou "Ako funguje Internet" od Jessicy McKellar (http://web.mit.edu/jesstess/www/). -Stavíme sa, že Internet používaš každý deň. Ale vieš, čo sa deje, keď napíšeš adresu, ako https://djangogirls.org do prehliadača a stlačíš `enter`? +Stavíme sa, že internet používaš každý deň. Ale vieš, čo sa udeje, keď napíšeš adresu ako https://djangogirls.org do prehliadača a stlačíš `enter`? -Prvá vec, ktorú potrebuješ vedieť je, že webové stránky sú len kopa súborov uložených na pevnom disku. Podobne ako tvoje filmy, hudba a obrázky. Ale je tu jedna časť, ktorá je špecifická pre webové stránky: obsahujú počítačový kód nazývaný HTML. +Prvá vec, ktorú musíš vedieť, je, že webová stránka je len kôpka súborov uložených na pevnom disku, presne ako tvoje filmy, hudba či obrázky. Ale je tu jedna vec, ktorá je špecifická pre webové stránky: obsahujú počítačový kód nazývaný HTML. -Pokiaľ nemáš skúsenosti s programovaní, môže byť pochopenie HTML zo začiatku zložité, ale tvoj webový prehliadač (ako Chrome, Safari, Firefox atď.) ho milujú. Webové prehliadače sú navrhnuté na to, aby rozumeli kódu, nasledovali jeho inštrukcie a prezentovali súbory, ktoré tvoria tvoju webovú stránku presne tak, ako to chceš. +Pokiaľ nemáš skúsenosti s programovaním, môže byť pochopenie HTML zo začiatku zložité, ale tvoj webový prehliadač (ako Chrome, Safari, Firefox atď.) HTML miluje. Webové prehliadače sú navrhnuté tak, aby rozumeli tomuto kódu, nasledovali jeho inštrukcie a ukazovali súbory, ktoré tvoria tvoju webovú stránku, presne tak, ako chceš. -Ako s každým súborom, potrebujeme uložiť HTML súbor niekde na pevnom disku. V prípade Interntu používame špeciálne, výkonné počítače nazývane *servery*. Nemajú obrazovku, myš alebo klávesnicu, pretože ich hlavnou úlohou je ukladať dáta a poskytovať ich. Preto ich voláme *serveri* -- pretože *poskytujú* (anglicky serve) tvoje dáta. +Ako každý iný súbor, aj HTML súbor musí byť uložený niekde na pevnom disku. V prípade internetu používame špeciálne výkonné počítače nazývané *servery*. Nemajú obrazovku, myš alebo klávesnicu, pretože ich hlavnou úlohou je ukladať dáta a poskytovať ich. Preto ich voláme *servery* -- pretože *poskytujú* (serve) tvoje dáta. -OK, avšak chceš vedieť, ako vyzerá Internet, že? +OK, ale ty chceš vedieť, ako vyzerá internet, že? Nakreslili sme ti obrázok! Vyzerá takto: ![Obrázok 1.1](images/internet_1.png) -Vyzerá to ako neporiadok, že? V skutočnosti je to sieť prepojených strojov (hore spomenutých *serverov*). Stoviek a tisícok strojov! Mnoho, mnoho kilometrov káblov po celom svete! Môžeš navštíviť stránku Submarine Cable Map (http://submarinecablemap.com) aby si videla nakoľko komplikovaná sieť to je. Tu je obrázok zo stránky: +Vyzerá to ako neporiadok, že? V skutočnosti je to sieť prepojených strojov (hore spomenutých *serverov*). Stoviek a tisícok strojov! Mnoho, mnoho kilometrov káblov po celom svete! Môžeš navštíviť stránku Submarine Cable Map (http://submarinecablemap.com), ak chceš vidieť, aká komplikovaná sieť to je. Tu je obrázok zo stránky: ![Obrázok 1.2](images/internet_3.png) -Nie je to fascinujúce? Ale zjavne nie je možné mať kábel medzi každým strojom pripojeným k Internetu. Takže na to, aby sme boli schopní kontaktovať stroj (napríklad ten na ktorom je uložená stránka https://djangogirls.org) musíme poslať žiadosť cez mnoho, mnoho rozdielnych strojov. +Nie je to fascinujúce? Ale zjavne nie je možné mať kábel medzi každým strojom pripojeným k internetu. Takže na to, aby sme boli schopní kontaktovať nejaký stroj (napríklad ten, na ktorom je uložená stránka https://djangogirls.org), musíme poslať žiadosť cez mnoho, mnoho rozdielnych strojov. Vyzerá to takto: ![Obrázok 1.3](images/internet_2.png) -Predstav si, že keď napíšeš https://djangogirls.org, pošleš list, v ktorom stojí: "Drahé Django Girls, chcem vidieť stránku djangogirls.org. Prosím pošli mi ju!" +Predstav si, že keď napíšeš https://djangogirls.org, pošleš list, v ktorom stojí: "Drahé Django Girls, chcem vidieť stránku djangogirls.org. Prosím, pošlite mi ju!" -Tvoj list ide na najbližšiu poštu. Potom ide na ďalšiu, ktorá je o čosi bližšie adresátovi, potom na ďalšiu a ďalšiu až kým nedorazí do svojej destinácie. Jediná unikátna vec je, že ako pošleš mnoho listov (*data paketov*) na rovnaké miesto, môžu ísť cez úplne odlišné pošty (*routy*). Záleží to na tom, ako sú distribuované na každej pošte. +Tvoj list ide na najbližšiu poštu. Potom ide na ďalšiu, ktorá je o čosi bližšie adresátovi či adresátke, potom na ďalšiu a ďalšiu, až kým nedorazí do svojej destinácie. Jediná unikátna vec je, že keď pošleš mnoho listov (*dátových paketov*) na rovnaké miesto, môžu ísť cez úplne odlišné pošty (*routery*). Záleží to od toho, ako sú rozdistribuované na každej pošte. ![Obrázok 1.4](images/internet_4.png) -Áno, je to tak jednoduché. Pošleš správu a očakávaš nejakú odpoveď. Samozrejme, namiesto papiera a pera použijes byty dát, ale myšlienka je rovnaká! +Takto to funguje - posielaš správy a očakávaš nejaké odpovede. Akurát namiesto papiera a pera používaš bajty dát, ale princíp je rovnaký! -Namiesto adries s menom ulice, mesta, PSČ a krajinou používame IP adresy. Tvoj počítač sa najprv opýta DNS (Domain Name System) aby preložil djangogirls.org na IP adresu. Funguje to trocha ako staré dobré telefónne zoznamy, kde si môžeš vyhľadať meno osoby ktorú chceš kontaktovať a nájsť jej telefón a adresu. +Namiesto adries s názvom ulice, mesta, PSČ a krajinou používame IP adresy. Tvoj počítač najprv požiada DNS (Domain Name System), aby preložil djangogirls.org na IP adresu. Funguje to trocha ako staré dobré telefónne zoznamy, kde si môžeš vyhľadať meno osoby, ktorú chceš kontaktovať, a nájsť jej telefón a adresu. -Keď pošleš list, musí mať určité náležitosti, aby ho bolo možné správne doručiť: adresu, známku atď. Taktiež používaš jazyk, ktorému adresát rozumie, že? Rovnako to funguje aj s *data paketmi* ktoré pošleš aby sa ti zobrazila stránka. Používame protokol s názvom HTTP (Hypertext Transfer Protocol). +Keď pošleš list, musí mať určité náležitosti, aby ho bolo možné správne doručiť: adresu, známku atď. Taktiež používaš jazyk, ktorému adresát rozumie, že? Rovnako to funguje aj s *dátovými paketmi*, ktoré posielaš, aby sa ti zobrazila stránka. Používame protokol s názvom HTTP (Hypertext Transfer Protocol). -Takže, v podstate, keď máš webovú stránku, musíš mať *server* (stroj) na ktorom bude žiť. Keď *server* obdrží prichádzajúcu *požiadavku* (v liste), pošle naspäť tvoju webovú stránku (v ďalšom liste). +Takže v podstate keď máš webovú stránku, musíš mať *server* (stroj), na ktorom bude žiť. Keď *server* obdrží prichádzajúcu *požiadavku* alebo request (v liste), pošle naspäť tvoju webovú stránku (v ďalšom liste). -Keďže toto je Django tutoriál, spýtaš sa, čo robí Django. Keď pošleš odpoveď, nechceš vždy poslať rovnaké veci každému. Je oveľa lepšie ak sú tvoje listy osobné, hlavne pre osobu, ktorá ti práve teraz napísala, že? Django ti pomáha vytvoriť tieto osobné, zaujímavé listy. :) +Keďže toto je Django tutoriál, možno sa pýtaš, kde do tohto procesu vstupuje Django. Keď pošleš odpoveď, nechceš vždy poslať každému to isté. Je oveľa lepšie, ak sú tvoje listy osobné, presne pre človeka, ktorý ti práve napísal, že? Django ti pomáha vytváriť tieto osobné, zaujímavé listy. :) Dosť bolo rečí, je čas tvoriť! \ No newline at end of file diff --git a/sk/html/README.md b/sk/html/README.md old mode 100755 new mode 100644 index 5800c122cae..74654b69e51 --- a/sk/html/README.md +++ b/sk/html/README.md @@ -1,48 +1,51 @@ # Úvod do HTML -Môžno sa pýtaš, čo jej šablóna? +Možno sa pýtaš, čo je to šablóna? -Šablóna je súbor, ktorý môžeme znova opakovane použiť, aby sme prezentovali nové informácie v konzistentnom formáte - šablónu môžeš použiť napríklad ako pomôcku pri písaní listu, pretože aj napriek tomu, že každý list môže obsahovať rozdielnu správu a byť adresovaný inej osobe, bude mať rovnaký formát. +Šablóna (template) je súbor, ktorý môžeme viackrát použiť, aby sme ukazovali rôzne dáta v rovnakom formáte. Šablónu môžeš použiť napríklad ako pomôcku pri písaní listu, pretože aj napriek tomu, že každý list môže obsahovať rozdielnu správu a byť adresovaný inej osobe, bude mať rovnaký formát. -Formát Django šablóny je popísaný v jazyku nazývanom HTML (to je to HTML, ktoré sme spomenuli v prvej kapitole **Ako funguje Internet**). +Formát Django šablóny je popísaný v jazyku nazývanom HTML (to je to HTML, ktoré sme spomenuli v prvej kapitole **Ako funguje internet**). ## Čo je HTML? -HTML je kód, ktorý je interpretovaný tvojím webovým prehliadačom - ako napríklad Chrome, Firefox alebo Safari - aby tak zobrazil užívateľom webové stránky. +HTML je kód, ktorý je interpretovaný tvojím webovým prehliadačom - ako napríklad Chrome, Firefox alebo Safari - aby tak zobrazil užívateľkám a užívateľom webové stránky. -HTML znamená "HyperText Markup Language". **HyperText** znamená, že sa jedná o typ textu, ktorý podporuje hypertextové odkazy medzi stránkami. **Markup** znamená, že sme vzali dokument a označili ho kódom aby sme niečomu povedali (v tomto prípade prehliadaču) ako interpretovať stránku. HTML kód je budovaný pomocou **tagov**, ktoré začínajú znakom `<` a končia znakom `>`. Tieto tagy reprezentujú značkovacie (Markup) **elementy**. +HTML znamená "HyperText Markup Language". **HyperText** znamená, že sa jedná o typ textu, ktorý podporuje hypertextové odkazy medzi stránkami. **Markup** znamená, že sme vzali dokument a označili ho kódom, aby sme niečomu povedali (v tomto prípade prehliadaču), ako interpretovať stránku. HTML kód je budovaný pomocou **tagov**, ktoré začínajú znakom `<` a končia znakom `>`. Tieto tagy reprezentujú značkovacie (markup) **elementy**. ## Tvoja prvá šablóna! -Vytvorenie šablóny znamená vytvorenie súboru šablóny. Všetko je súbor, však? To si si asi už všimla. +Vytvorenie šablóny znamená, že najprv musíme vytvoriť šablónový súbor. Všetko je súbor, však? To si si asi už všimla. -Šablóny sú uložené v zložke `blog/templates/blog`. Takže najprv vytvor v zložke blogu zložku s názvom `templates`. Potom vytvor ďalšiu zložku s názvom `blog` v zložke templates: +Šablóny sú uložené v zložke `blog/templates/blog`. Takže najprv vytvor v priečinku blog priečinok s názvom `templates`. Potom vytvor ďalší priečinok s názvom `blog` v priečinku templates: blog └───templates └───blog -(Možno sa pýtaš prečo potrebujeme dve zložky s menom `blog` - ako neskôr zistíš, je to len užitočna konvencia, ktorá ti uľahčí život keď sa veci začnú komplikovať.) +(Možno sa pýtaš, prečo potrebujeme dve zložky s menom `blog` - ako neskôr zistíš, je to len užitočná konvencia, ktorá ti uľahčí život, keď sa veci začnú komplikovať.) -A teraz vytvor súbor `post_list.html` (zatiaľ ho ponechaj prázdny) v zložke `blog/templates/blog`. +A teraz vytvor súbor `post_list.html` (zatiaľ ho ponechaj prázdny) v priečinku `blog/templates/blog`. Pozri sa, ako momentálne vyzerá tvoja stránka: http://127.0.0.1:8000/ -> Pokiaľ stále vidíš chybu `TemplateDoesNotExist`, skús vyreštartovať svoj server. Choď do príkazového riadku, zastav server stlačením Ctrl+C (stlač naraz tlačidlá Control a C) a spusti ho znova pomocou príkazu `python manage.py runserver`. +> Pokiaľ stále vidíš chybu `TemplateDoesNotExist`, skús reštartovať svoj server. Choď do príkazového riadku, zastav server stlačením Ctrl+C (stlač naraz tlačidlá Control a C) a spusti ho znova pomocou príkazu `python manage.py runserver`. ![Obrázok 11.1](images/step1.png) -Žiadne ďalšie chyby! Gratulujeme :) Avšak tvoja stránka zatiaľ neukazuje nič, okrem prázdnej stránky, pretože tvoja šablóna je taktiež prázdna. To musíme opraviť. +Chyba je preč! Gratulujeme :) Avšak tvoja webstránka zatiaľ neukazuje nič, len prázdnu stránku, pretože tvoja šablóna je taktiež prázdna. To musíme napraviť. -Pridaj nasledujúci kód do tvojho súboru šablóny: +Otvor svoj nový súbor v editore a pridaj doň nasledovné: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html + +

Hi there!

It works!

+ ``` @@ -50,10 +53,11 @@ Takže ako momentálne vyzerá tvoja stránka? To môžeš zistiť kliknutím na ![Obrázok 11.2](images/step3.png) -Funguje to! Dobrá práca :) +Funguje to. Dobrá práca! :) -* Najzákladnejší tag, ``, je vždy na začiatku každej webovej stránky a `` je vždy na jej konci. Ako môžeš vidieť, celý obsah stránky sa nachádza medzi začínajúcim tagom `` a uzatvárajúcim tagom `` -* `

` je tag pre element odstavca; `

` uzatvára každý odstavec +* Riadok `` nie je HTML tag. Len definuje typ dokumentu. V tomto prípade hovorí prehliadaču, že typ nášho dokumentu je [HTML5](https://html.spec.whatwg.org/#the-doctype). Každý HTML5 súbor začína takto. +* Najzákladnejší tag, ``, je vždy na začiatku každej webovej stránky, a `` je vždy na jej konci. Ako môžeš vidieť, celý obsah stránky sa nachádza medzi začínajúcim tagom `` a uzatvárajúcim tagom `` +* `

` je tag pre element odstavca; `

` každý odstavec uzatvára ## Head a body @@ -61,15 +65,16 @@ Každá HTML stránka je taktiež rozdelená do dvoch elementov: **head** a **bo * **head** je element, ktorý obsahuje informácie o dokumente, ktoré nie sú zobrazené na obrazovke. -* **body** je element, ktorý obsahuje všetko ostatné zobrazené ako časť webovej stránky. +* **body** je element, ktorý obsahuje všetko ostatné, zobrazené ako časť webovej stránky. -`` používame, aby sme povedali prehliadaču o konfigurácii stránky a `` aby sme mu povedali, čo na stránke je. +`` používame, aby sme povedali prehliadaču o konfigurácii stránky, a ``, aby sme mu povedali, čo na stránke je. -Napríklad môžeš dať stránke titulok pomocou title elementu v hlavičke `` takto: +Napríklad môžeš dať stránke titulok pomocou elementu title v elemente `` takto: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html + Ola's blog @@ -85,76 +90,85 @@ Ulož súbor a znova načítaj svoju stránku. ![Obrázok 11.3](images/step4.png) -Všimni si ako prehliadač rozumie, že "Ola's blog" je titulok tvojej stránky? Interpretuje `Ola's blog` a vkladá text ako názov záložky (tento názov bude použitý aj keď si stránku uložíš do záložky a tak ďalej). +Všimla si si, ako prehliadač porozumel, že "Ola's blog" je titulok tvojej stránky? Prečítal si slová `Ola's blog` a vložil ich do záhlavia záložky v tvojom prehliadači (tiež ich bude používať, keby si si stránku napríklad uložila, atď.). Pravdepodobne si taktiež všimneš, že každý začínajúci tag má svoj *uzatvárajúci tag* obsahujúci `/`, a že elementy sú *vnorené* (tj. nemôžeš daný tag zatvoriť, kým nie sú taktiež zatvorené všetky tagy, ktoré sú v jeho vnútri). -Je to ako vkladať veci do krabice. Máš jednú veľkú krabicu, ``; vo vnútri je ``, a tá obsahuje menšie krabice: `

`. +Je to, ako keby si vkladala veci do krabice. Máš jednu veľkú krabicu, ``; vo vnútri je ``, a tá obsahuje menšie krabice: `

`. -Musíš dodržovať pravidlá *uzatvárania* tagov a *vnorenia* elementov - pokiaľ ich nebudeš dodržovať, prehliadač nemusí správne interpretovať tagy a tvoja stránka bude zobrazená nesprávne. +Musíš dodržiavať pravidlá *uzatvárania* tagov a *vnorenia* elementov - pokiaľ ich nebudeš dodržiavať, prehliadač nemusí tagy správne interpretovať a tvoja stránka sa zobrazí nesprávne. -## Uprav svoju šablónu +## Upravenie tvojej šablóny Môžeš sa trocha pohrať s tým, že budeš upravovať svoju šablónu! Tu je zopár užitočných tagov: -* `

Hlavný nádpis

` - pre tvoj najdôležitejší nádpis -* `

Podnádpis

` pre nádpis na nižšej úrovni -* `

Pod-podnádpis

`.. a tak ďalej až do `
` +* `

Hlavný nadpis

` - pre tvoj najdôležitejší nadpis +* `

Podnadpis

` pre nadpis na nižšej úrovni +* `

Pod-podnadpis

`... a tak ďalej až do `
` * `

Odsek textu

` -* `text` zdôrazňuje tvoj text +* `text` zvýrazňuje tvoj text * `text` zvýrazňuje tvoj text o čosi viac -* `
` vkladá nový riadok (do br nemôžeš nič vložiť a nemá uzatvárací tag) +* `
` vkladá nový riadok (do br nemôžeš nič vložiť a nemá ani uzatvárací tag) * `link` vytvára odkaz -* `
  • prvá položka
  • druhá položka
` vytvára zoznam ako tento! +* `
  • prvá položka
  • druhá položka
` vytvára zoznam, ako je tento! * `
` definuje sekciu stránky +* `` definuje skupinu navigačných odkazov +* `
` (článok) definuje nezávislý obsah, ktorý má zmysel sám osebe +* `
` definuje sekciu v dokumente +* `
` definuje hlavičku dokumentu alebo sekcie +* `
` definuje hlavný obsah dokumentu +* `` definuje obsah vedľa iného obsahu (napr. bočná lišta) +* `
` definuje pätičku dokumentu alebo sekcie +* `` definuje konkrétny čas (alebo dátum a čas) Tu je príklad úplnej šablóny, skopíruj ho do súboru `blog/templates/blog/post_list.html`: {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html + Django Girls blog - + -
-

published: 14.06.2014, 12:14

+
+

My first post

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

-
+ -
-

published: 14.06.2014, 12:14

+
+

My second post

Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut f.

-
+ ``` -Vytvorili sme tri `div` sekcie. +Týmto sme vytvorili jednu hlavičkovú `header` sekciu a dve článkové `article` sekcie. -* Prvá `div` sekcia obsahuje titulok nášho blogu - je to nádpis a odkaz -* Ďalšie dva `div` elementy obsahujú príspevky blogu s časom publikovania, `h2` nádpisom príspevku, na ktorý sa dá kliknúť a dva `p` (odstavce) textu, jeden pre dátum a druhý pre náš príspevok. +* Prvý `header` element obsahuje hlavný nadpis nášho blogu - je to nadpis a odkaz +* Nasledujúce `article` elementy obsahujú naše blogové príspevky, každý s dátumom publikovania v `time` elemente, s nadpisom príspevku v `h2` elemente, na ktorý sa dá kliknúť, a s odstavcovým elementom `p`, ktorý predstavuje text nášho príspevku. Výsledok je nasledovný: ![Obrázok 11.4](images/step6.png) -Jupí! Ale zatiaľ naša šablóna zobrazila len presne **rovnaké informácie** - kým pred chvíľou sme hovorili, že nám šablóny dovoľujú zobrazovať **rozdielne** informácie v **rovnakom formáte**. +Jupí! Ale zatiaľ naša šablóna zobrazila len presne **tie isté dáta** - kým pred chvíľou sme hovorili, že nám šablóny dovoľujú zobrazovať **rozdielne** dáta v **rovnakom formáte**. -To čo v skutočnosti chceme spraviť je zobraziť reálne príspevky pridané v Django admin rozhraní - a to je to, čo teraz spravíme. +To, čo v skutočnosti chceme docieliť, je zobraziť reálne príspevky pridané v Django admin rozhraní - a to teraz aj spravíme. -## Ešte jedna vec: nasaďte to! +## Ešte jedna vec: nasaďme to! -Bolo by skvelé, ak by sme všetky tieto veci mohli vidieť naživo na Internete, že? Spravme ďalšie PythonAnywhere nasadenie: +Bolo by skvelé, ak by sme všetky tieto veci mohli vidieť naživo na internete, že? Spravme ďalšie PythonAnywhere nasadenie: -### Commitni a pošli svoj kód na GitHub +### Commitni a pošli svoj kód na Github Najprv sa pozrime, ktoré súbory sa zmenili od posledného nasadenia (tieto príkazy spusti lokálne, nie na PythonAnywhere): @@ -163,32 +177,30 @@ Najprv sa pozrime, ktoré súbory sa zmenili od posledného nasadenia (tieto pr $ git status -Uisti sa, že si v zložke `djangogirls` a následne povedzme `gitu` nech zahrnie všetky zmeny v zložke: +Uisti sa, že si v priečinku `djangogirls`, a následne povedz `gitu`, nech zahrnie všetky zmeny v priečinku: {% filename %}command-line{% endfilename %} - $ git add --all . + $ git add . -> **Poznámka** - `--all` znamená, že `git` rozozná, ak si vymazala súbory (štandardne rozoznáva len nové/modifikované súbory). Spomeň si tiež (bolo to v kapitole 3), že `.` znamená aktuálny adresár. - -Predtým, ako nahráme všetky súbory, skontrolujme čo bude `git` nahrávať (všetky súbory, ktoré `git` nahrá by teraz mali byť zelené): +Predtým, ako nahráme všetky súbory, skontrolujme, čo bude `git` nahrávať (všetky súbory, ktoré `git` nahrá, by teraz mali byť zelené): {% filename %}command-line{% endfilename %} $ git status -Už sme skoro tam, teraz nastal čas mu povedať, aby uložil tieto zmeny v jeho histórii. Dáme mu "commit správu", kde popíšeme, čo sme zmenili. V tomto štádiu môžeš napísať čokoľvek, čo chceš, ale je nápomocné napísať čosi, čo je popisné natoľko, že si budeš v budúcnosti pamätať, čo si spravila. +Už sme skoro tam, teraz nastal čas mu povedať, aby uložil tieto zmeny v jeho histórii. Dáme mu "commit správu" (commit message), kde popíšeme, čo sme zmenili. V tomto štádiu môžeš napísať čokoľvek, čo chceš, ale je nápomocné napísať čosi, čo je popisné natoľko, že si budeš v budúcnosti pamätať, čo si spravila. {% filename %}command-line{% endfilename %} - $ git commit -m "Zmeny v HTML pre stránku." + $ git commit -m "Zmeny v HTML pre stranku." -> **Poznámka** - Uisti sa, že si použila dvojité úvodzovky okolo commit správy. +> **Poznámka** Uisti sa, že si okolo commit správy použila dvojité úvodzovky. -Po tom, čo sme to dokončili, nahráme (push) naše zmeny na GitHub: +Keď to máme hotové, nahráme (push) naše zmeny na GitHub: {% filename %}command-line{% endfilename %} @@ -199,17 +211,17 @@ Po tom, čo sme to dokončili, nahráme (push) naše zmeny na GitHub: * Otvor [konzolovú stránku PythonAnywhere](https://www.pythonanywhere.com/consoles/) a prejdi do svojej **Bash konzoly** (alebo naštartuj novú). Potom zadaj: -{% filename %}command-line{% endfilename %} +{% filename %}PythonAnywhere command-line{% endfilename %} - $ cd ~/.pythonanywhere.com + $ cd ~/.pythonanywhere.com $ git pull [...] -(Nezabudni nahradiť `` svojím uživateľským menom na PythonAnywhere, bez hranatých zátvoriek). +Nezabudni nahradiť `` svojou subdoménou na PythonAnywhere bez špicatých zátvoriek. Názov tvojej subdomény je zväčša tvoje užívateľské meno na PythonAnywhere, ale sú prípady, kedy môže byť trochu iný (napríklad, keď tvoje užívateľské meno obsahuje veľké písmená). Čiže ak ti tento príkaz nefunguje, skús spustiť `ls` (list files, alebo vypíš súbory), aby si zistila, ako sa tvoja subdoména/podadresár volá, a potom sa do tohto adresára presuň pomocou `cd`. -A sleduj ako sa tvoj kód sťahuje. Pokiaľ chceš skontrolovať, že dorazil, môžeš skočiť do **záložky Files** a pozrieť sa na svoj kód na PythonAnywhere. +Sleduj, ako sa tvoj kód sťahuje. Ak si chceš overiť, že už prišiel, prejdi na stránku **"Files"** a pozri sa na svoj kód na PythonAnywhere (po ostatné PythonAnywhere stránky sa vieš potom dostať pomocou tlačidla v menu na stránke s konzolou). -* Nakoniec skoč do [záložky Web](https://www.pythonanywhere.com/web_app_setup/) a stlač **Reload** na tvojej webovej aplikácii. +* A nakoniec prejdi na [záložku Web](https://www.pythonanywhere.com/web_app_setup/) a stlač **Reload** na svojej webovej aplikácii. -Aktualizácia by mala prebehnuť a zmeny by mali byť dostupne v živej verzii! Obnov svoju stránku v prehliadači. Zmeny by mali byť viditeľné. :) \ No newline at end of file +Tvoje zmeny by mali byť online! Obnov svoju stránku v prehliadači. Zmeny by mali byť viditeľné. :) \ No newline at end of file diff --git a/sk/installation/README.md b/sk/installation/README.md old mode 100755 new mode 100644 index 5e41439a9be..cec8354f253 --- a/sk/installation/README.md +++ b/sk/installation/README.md @@ -1,51 +1,61 @@ # Pokiaľ robíš tutoriál doma -Pokiaľ robíš tento tutoriál doma, nie na jednej z [Django Girls akcií](https://djangogirls.org/events/), môžeš úplne preskočiť túto kapitolu a pokračovať rovno na kapitolu [Ako funguje Internet](../how_the_internet_works/README.md). +Pokiaľ robíš tento tutoriál doma, a nie na jednej z [Django Girls akcií](https://djangogirls.org/events/), môžeš úplne preskočiť túto kapitolu a pokračovať rovno na kapitolu [Ako funguje internet](../how_the_internet_works/README.md). -Je to preto, že tieto veci spomenieme počas tutoriálu a toto je len dodatočná stránka, ktorá zjednocuje všetky inštalačné inštrukcie na jednom mieste. Django Girls akcie obsahujú "Inštalačné večery", kde nainštalujeme všetko, aby sme sa s tým nemuseli trápiť počas workshopu, takže táto stránka je pre nás užitočná. - -Pokiaľ sa ti zdá táto kapitola užitočná, tiež si ju môžeš celú prejsť. Ale pokiaľ sa chceš začať učiť predtým, ako si nainštaluješ množstvo vecí na svoj počítač, preskoč túto kapitolu a my ti vysvetlíme inštalačnú časť neskôr. +Je to preto, lebo v tutoriáli sa zaoberáme inštaláciou vecí, ktoré sú potrebné - toto je len dodatočná stránka, ktorá zhromažďuje všetky pokyny na inštaláciu na jednom mieste (čo je užitočné pre niektoré formáty workshopov). Ak chceš, môžeš si nainštalovať všetko, čo spomíname na tejto stránke, rovno teraz. Ale pokiaľ sa chceš začať učiť predtým, ako si nainštaluješ množstvo vecí na svoj počítač, preskoč túto kapitolu a my ti vysvetlíme, ako veci nainštalovať, neskôr, priamo keď ich budeš potrebovať. Veľa šťastia! +# Ak sa zúčastníš workshopu + +Ak sa chystáš zúčastniť [Django Girls eventu](https://djangogirls.org/events/): + +* Súčasťou tvojho workshopu môže byť "inštalačná párty" pred samotným workshopom. Ak si na takejto inštalačnej párty, táto stránka je pre teba! Tieto inštrukcie ti pomôžu nainštalovať si všetko potrebné pre workshop. Ak treba, tak s pomocou mentoriek alebo mentorov. Potom na samotnom workshope budeš môcť preskočiť inštalačné inštrukcie, ktoré sa objavia v hlavnom tutoriáli, keď sa k nim dostaneš. +* Organizátorky a organizátori tvojho workshopu ťa možno poprosili, aby si si skúsila všetko nainštalovať na svojom počítači doma predtým, než začne workshop. Ak to je tvoj prípad, táto stránka je pre teba! Nasleduj tieto inštrukcie, ako sa ti bude dať. Pokiaľ sa ti nepodarí niečo konkrétne nainštalovať, môžeš sa spýtať svojej mentorky či mentora neskôr na samotnom workshope, keď sa dostaneš po časť tutoriálu s pokynmi k inštalácii. +* Ak súčasťou tvojho workshopu nie je inštalačná párty (alebo si sa nemohla zúčastniť) a pokiaľ ťa organizátorky a organizátori nepoprosili, aby si si všetko nainštalovala pred príchodom, preskoč túto stránku a prejdi rovno na kapitolu [Ako funguje internet](../how_the_internet_works/README.md). Ako budeš postupovať tutoriálom, budeš si inštalovať všetko potrebné. + # Inštalácia -Počas workshopu budeš vytvárať blog a v tutoriále je pár nastavení, ktoré by bolo dobré prejsť predtým, aby si bola pripravená začať programovať. +V tomto tutoriáli si vytvoríš blog. Aby sa ti to podarilo, počas toho, ako budeš postupovať tutoriálom, budeš dostávať inštrukcie, ako nainštalovať rôzny softvér na svojom počítači a ako si povytváravať zopár online účtov, keď bude treba. Táto stránka združuje všetky pokyny k inštalácii a vytváraniu účtov na jednom mieste (čo je užitočné pre niektoré workshopové formáty). {% include "/chromebook_setup/instructions.md" %} -# Inštalácia Pythonu +# Stručný úvod k príkazovému riadku {#command-line} -{% include "/python_installation/instructions.md" %} +Viacero krokov nižšie spomína "konzolu", "terminál", "príkazové okno", "príkazový riadok" (alebo "command line"). Všetky tieto termíny znamenajú to isté: okno na tvojom počítači, do ktorého môžeš zadávať príkazy. Keď sa dostaneš k hlavnému tutoriálu, dozvieš sa o príkazovom riadku viac. V tejto chvíli je pre teba hlavné vedieť, ako otvoriť príkazové okno a ako vyzerá: {% include "/intro_to_command_line/open_instructions.md" %} -# Nastavenie virtualenv a inštalácia Django +# Inštalácia Pythonu {#python} -{% include "/django_installation/instructions.md" %} +{% include "/python_installation/instructions.md" %} -# Inštalácia editoru kódu +# Inštalácia editoru kódu {#code-editor} {% include "/code_editor/instructions.md" %} -# Inštalácia Gitu +# Vytvorenie virtualenvu a inštalácia Djanga {#virtualenv} + +{% include "/django_installation/instructions.md" %} + +# Inštalácia Gitu {#git} {% include "/deploy/install_git.md" %} -# Vytvorenie GitHub účtu +# Vytvorenie GitHub účtu {#github-account} -Choď na [GitHub.com](https://www.github.com) a založ (Sign Up) si nový účet zdarma. +Choď na [GitHub.com](https://www.github.com) a zaregistruj si nový bezplatný používateľský účet. Nezabudni si zapamätať heslo (ak používaš správcu hesiel, pridaj si ho doň). -# Vytvor si PythonAnywhere účet +# Vytvorenie PythonAnywhere účtu {#pythonanywhere-account} {% include "/deploy/signup_pythonanywhere.md" %} # Začni si čítať -Gratulujeme, si pripravená začať! Pokiaľ máš stále zvyšný čas pred začiatkom workshopu, bolo by užitočné, ak by si si prečítala pár začiatočníckych kapitol: +Gratulujeme, si pripravená začať! Pokiaľ máš stále zvyšný čas pred začiatkom workshopu, bolo by užitočné prečítať si pár začiatočníckych kapitol: -* [Ako funguje Internet](../how_the_internet_works/README.md) +* [Ako funguje internet](../how_the_internet_works/README.md) * [Úvod do príkazového riadku](../intro_to_command_line/README.md) @@ -55,4 +65,4 @@ Gratulujeme, si pripravená začať! Pokiaľ máš stále zvyšný čas pred za # Uži si workshop! -Keď začne workshop, budeš môcť prejsť priamo na [Tvoj prvý Django projekt!](../django_start_project/README.md), lebo si už absolvovala látku v predchádzajucích kapitol. \ No newline at end of file +Keď začne workshop, budeš môcť prejsť priamo na [Tvoj prvý Django projekt!](../django_start_project/README.md), lebo si už absolvovala látku z predchádzajúcich kapitol. \ No newline at end of file diff --git a/sk/intro_to_command_line/README.md b/sk/intro_to_command_line/README.md old mode 100755 new mode 100644 index ea27bdb52e6..2b9b74b42b7 --- a/sk/intro_to_command_line/README.md +++ b/sk/intro_to_command_line/README.md @@ -1,42 +1,24 @@ # Úvod do rozhrania príkazového riadku -> Pre čitateľov doma: Táto kapitola je spracovaná v [Your new friend: Command Line](https://www.youtube.com/watch?v=jvZLWhkzX-8) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná v [How the Internet Works](https://www.youtube.com/watch?v=jvZLWhkzX-8) videu. -Je to vzrušujúce, však? Už o pár minút napíšeš svoj prvý riadok kódu! :) +Je to vzrušujúce, však?! Už o pár minút napíšeš svoj prvý riadok kódu! :) -**Dovoľ nám predstaviť ti tvojho nového priateľa: príkazový riadok!** +**Dovoľ nám predstaviť ti tvojho nového kamaráta: príkazový riadok!** -Nasledujúce kroky ti ukážu ako používať tú čiernu obrzovku, čo používajú všetci hackeri. Zo začiatku môže vyzerať trochu desivo, ale je to naozaj len riadok, čo čaká na tvoje príkazy. +Nasledujúce kroky ti ukážu, ako používať tú čiernu obrzovku, čo používajú všetci hackeri a hackerky. Zo začiatku môže vyzerať trochu desivo, ale je to naozaj len okno, čo čaká na tvoje príkazy. -> **Poznámka** Prosím všimni si, že v knižke používame výrazy 'adresár' aj 'zložka' zameniteľne, no ich význam je rovnaký. +> **Poznámka** Prosím, maj na pamäti, že v tomto texte používame výrazy "adresár", "zložka" a "priečinok" zameniteľne - ich význam je rovnaký. ## Čo je to príkazový riadok? -Okno, ktoré sa zvyčajne nazýva **príkazový riadok** alebo **rozhranie príkazového riadku** je textová aplikácia na prehliadanie, spracovanie a manipuláciu so súbormi v tvojom počítači. V podstate je to ako Prieskumník vo Windowse alebo Finder na Macu, akurát bez grafického rozhrania. Ďalšie názvy pre príkazový riadok môžu byť: *cmd*, *CLI*, *prompt*, *konzola* alebo *terminál*. +Okno, ktoré sa zvyčajne nazýva **príkazový riadok** (command line) alebo **rozhranie príkazového riadku** (command line interface) je textová aplikácia na prehliadanie, spracúvanie a manipuláciu so súbormi v tvojom počítači. V podstate je to ako Prieskumník vo Windowse alebo Finder na Macu, akurát bez grafického rozhrania. Ďalšie názvy pre príkazový riadok môžu byť: *cmd*, *CLI*, *prompt*, *konzola* alebo *terminál*. -## Otvor rozhranie príkazového riadku +## Otvorenie rozhranie príkazového riadku Aby sme mohli trochu experimentovať, musíme najskôr rozhranie príkazového riadku otvoriť. - - -Prejdite na Štart menu → Systém Windows → Príkazový riadok. - -> V starších verziách systému Windows, pozrite v Štart menu → Všetky programy → Príslušenstvo → Príkazový riadok. - - - - - -Choď do Aplikácie → Nástroje → Terminál. - - - - - -Pravdepodobne ho nájdeš pod Aplikácie → Príslušenstvo → Terminál, ale to závisí na tvojom systéme. Ak to tam nie je, tak si to jednoducho vygoogli. :) - - +{% include "/intro_to_command_line/open_instructions.md" %} ## Príkazový riadok @@ -44,33 +26,35 @@ Teraz by si už mala vidieť biele alebo čierne okno, ktoré čaká na tvoje pr -Ak si na Macu alebo Linuxe, zrejme uvidíš `$`, presne takto: +Ak si na Macu alebo Linuxe, zrejme uvidíš `$`. Takto: {% filename %}command-line{% endfilename %} $ - + -Na Windowse je to znak `>`, takýto: +Na Windowse pravdepodobne vidíš `>`. Takto: {% filename %}command-line{% endfilename %} > + +Pozri na sekciu o Linuxe priamo nad touto - niečo také uvidíš neskôr, keď sa v tutoriáli dostaneme k časti o PythonAnywhere. -Každý príkaz budeš zadávať za tento znak a jednu medzeru. Ty to ale písať nemusíš, urobí to za teba tvoj počítač. :) +Pred každým príkazom budeš vidieť `$` alebo `>` a jednu medzeru, ale tie nepíš. Tvoj počítač to spraví za teba. :) -> Len krátka poznámka: v tvojom prípade môže tam byť pred niečo ako `C:\Users\ola>` alebo `Olas-MacBook-Air:~ ola$` a to je úplne v poriadku. +> Len malá poznámka: možno máš pred znakom promptu niečo ako `C:\Users\ola>` alebo `Olas-MacBook-Air:~ ola$`. To je úplne v poriadku. -Časť po a vrátane `$` alebo `>` sa nazýva *príkazový riadok*, alebo *prompt* skrátene. Je to miesto kde zadávaš príkazy. +Časť od začiatku riadku po `$` alebo `>` (vrátane) sa nazýva *prompt*. Prompt ťa nabáda (angl. prompt), aby si niečo napísala. -V tutoriále, keď chceme, aby si zadala príkaz, použijeme `$` alebo `>`, a občas aj väčšmej doľava. Môžeš ignorovať ľavú čast a zadaj príkaz, ktorý sa začína po prompte. +Keď od teba budeme v tomto tutoriáli chcieť, aby si napísala príkaz, budeme v príkladoch písať aj `$` alebo `>`, alebo prípadne aj viac vecí na začiatku riadku. Túto celú ľavú časť ignoruj a napíš len príkaz, ktorý sa začína po prompte. ## Tvoj prvý príkaz (Hurá!) @@ -81,7 +65,7 @@ Začnime tým, že zadáme nasledovný príkaz: {% filename %}command-line{% endfilename %} $ whoami - + @@ -90,27 +74,27 @@ Začnime tým, že zadáme nasledovný príkaz: {% filename %}command-line{% endfilename %} > whoami - + -A stlač `enter`. Toto je výsledok: +A potom stlač `enter`. Toto je výsledok: {% filename %}command-line{% endfilename %} $ whoami olasitarska - + Ako vidíš, počítač práve vypísal tvoje užívateľské meno. Milé, nie? :) -> Skús každý príkaz napísať, nielen kopírovať. Viac si tak zapamätáš! +> Skús každý príkaz napísať, nielen skopírovať. Viac si tak zapamätáš! ## Základy Každý operačný systém má trochu iné príkazy pre príkazový riadok, takže postupuj podľa inštrukcií pre tvoj operačný systém. Tak čo, vyskúšame to? -### Aktuálny adresár +### Aktuálny priečinok Bolo by fajn vedieť, kde sa nachádzame, však? Zistime to. Napíš tento príkaz a stlač `enter`: @@ -120,9 +104,9 @@ Bolo by fajn vedieť, kde sa nachádzame, však? Zistime to. Napíš tento prík $ pwd /Users/olasitarska + - -> Poznámka: 'pwd' je skratka pre 'print working directory'. +> Poznámka: 'pwd' je skratka pre 'print working directory' (vypíš pracovný adresár). @@ -132,19 +116,35 @@ Bolo by fajn vedieť, kde sa nachádzame, však? Zistime to. Napíš tento prík > cd C:\Users\olasitarska + - -> Poznámka: 'cd' znamená 'change directory', teda zmena priečinku. V PowerShell môžeš použiť pwd tak ako na Linuxe alebo Mac OS X. +> Poznámka: 'cd' znamená 'change directory', teda zmeň priečinok. V PowerShelli môžeš použiť pwd rovnako ako na Linuxe alebo Mac OS X. -Na svojom stroji pravdepodobne uvidíš niečo takéto. Keď otvoríš príkazový riadok, zvyčajne začneš vo svojom domovskom adresári. +Na svojom stroji pravdepodobne uvidíš niečo takéto. Keď otvoríš príkazový riadok, zvyčajne začneš vo svojom domovskom priečinku. * * * -### Zoznam súborov a adresárov +### Ako sa dozvedieť viac o príkaze + +Mnoho príkazov, ktoré píšeš do konzoly, má zabudovanú nápovedu (help), ktorú si môžeš nechať zobraziť! Napríklad, ak sa chceš dozvedieť viac o príkaze z predošlej časti: + + + +OS X a Linux majú príkaz `man`, ktorý ti zobrazí nápovedu k iným príkazom. Skús `man pwd` a pozri, čo ti vypíše, alebo napíš `man` v kombinácii s inými príkazmi, aby sa ti zobrazila ich nápoveda. Výstup príkazu `man` má zvyčajne niekoľko strán. Na listovanie použi medzerník a stlačením klávesy `q` nápovedu ukončíš. + + + + + +Keď pripojíš `/?` na koniec príkazu, vo väčšine prípadov tiež dostaneš nápovedu. Je možné, že budeš musieť trochu poscrollovať vo svojom príkazovom okne, aby si si ju mohla celú prečítať. Skús `cd /?`. + + + +### Zoznam súborov a priečinkov -Tak čo je v ňom? Bolo by super zistiť to. Pozrime sa na to: +Bolo by zaujímavé zistiť, čo taký priečinok obsahuje. Pozrime sa na to: @@ -156,7 +156,7 @@ Tak čo je v ňom? Bolo by super zistiť to. Pozrime sa na to: Downloads Music ... - + @@ -166,27 +166,38 @@ Tak čo je v ňom? Bolo by super zistiť to. Pozrime sa na to: > dir Directory of C:\Users\olasitarska - 05/08/2014 07:28 PM Applications - 05/08/2014 07:28 PM Desktop - 05/08/2014 07:28 PM Downloads - 05/08/2014 07:28 PM Music + 05/08/2020 07:28 PM Applications + 05/08/2020 07:28 PM Desktop + 05/08/2020 07:28 PM Downloads + 05/08/2020 07:28 PM Music ... + - -> Poznámka: V powershelli môžeš použiť aj 'ls' ako na Linuxe alebo Mac OS X. +> Poznámka: V PowerShelli môžeš použiť aj 'ls' rovnako ako na Linuxe alebo Mac OS X. * * * -### Zmena aktuálneho adresára +### Zmena aktuálneho priečinku + +Teraz prejdime do priečinku, kde je naša plocha: + + + +{% filename %}command-line{% endfilename %} + + $ cd Desktop + -Teraz prejdime do adresára Plochy: + - + {% filename %}command-line{% endfilename %} $ cd Desktop + +Tu je dobré poznamenať, že názov "Desktop" môže byť preložený do jazyka, ktorý máš nastavený vo svojom linuxovom konte. V takom prípade budeš musieť zmeniť `Desktop` na toto preložené meno, napríklad `Schreibtisch` v nemčine. @@ -195,11 +206,11 @@ Teraz prejdime do adresára Plochy: {% filename %}command-line{% endfilename %} > cd Desktop - + -Skontroluj, či sa adresár skutočne zmenil: +Skontroluj, či sa priečinok skutočne zmenil: @@ -207,7 +218,7 @@ Skontroluj, či sa adresár skutočne zmenil: $ pwd /Users/olasitarska/Desktop - + @@ -217,17 +228,17 @@ Skontroluj, či sa adresár skutočne zmenil: > cd C:\Users\olasitarska\Desktop - + A je to! -> Profi tip: ak napíšeš `cd D` a potom stlačíš `tab`, príkazový riadok automaticky doplní zvyšok názvu, takže adresáre môžeš prechádzať rýchlejšie. Ak na "D" začína viac ako jeden adresár, stlač `tab` dvakrát a dostaneš zoznam možností. +> Profi tip: ak napíšeš `cd D` a potom stlačíš klávesu `Tab`, príkazový riadok automaticky doplní zvyšok názvu, takže priečinky môžeš prechádzať rýchlejšie. Ak na "D" začína viac ako jeden priečinok, stlač `Tab` dvakrát a dostaneš zoznam možností. * * * -### Vytvoriť adresár +### Vytvorenie priečinku Čo takto vytvoriť pokusný adresár na ploche? Urobíš to takto: @@ -236,7 +247,7 @@ A je to! {% filename %}command-line{% endfilename %} $ mkdir pokus - + @@ -244,12 +255,12 @@ A je to! {% filename %}command-line{% endfilename %} - > mkdir practice - + > mkdir pokus + -Tento príkazík vytvorí adresár s názvom `pokus` na tvojej ploche. Či je adresár naozaj tam môžeš zistiť jednoducho pohľadom na Plochu alebo spustením príkazu `ls` alebo `dir`! Vyskúšaj to. :) +Tento príkazík vytvorí adresár s názvom `pokus` na tvojej ploche. Či je priečinok naozaj tam, môžeš zistiť jednoducho pohľadom na plochu alebo spustením príkazu `ls` alebo `dir`! Skús si to. :) > Profi tip: ak sa ti nechce vypisovať stále dookola tie isté príkazy, skús sa stlačením `šípky hore` a `šípky dole` vrátiť k nedávno použitým príkazom. @@ -269,7 +280,7 @@ Malá výzva pre teba: v čerstvo vytvorenom adresári `pokus` vytvor adresár s $ mkdir test $ ls test - + @@ -277,11 +288,11 @@ Malá výzva pre teba: v čerstvo vytvorenom adresári `pokus` vytvor adresár s {% filename %}command-line{% endfilename %} - > cd practice + > cd pokus > mkdir test > dir - 03/20/2016 11:05 AM test - + 05/08/2020 07:28 PM test + @@ -291,16 +302,16 @@ Gratulujeme! :) ### Upratovanie -Nechceme po sebe nechať neporiadok, takže odstránime všetko, čo sme doteraz vytvorili. +Nechceme po sebe nechať neporiadok, tak poďme odstrániť všetko, čo sme doteraz vytvorili. -Najkôr sa musíme vrátiť späť na Plochu: +Najskôr sa musíme vrátiť späť na plochu: {% filename %}command-line{% endfilename %} $ cd .. - + @@ -309,11 +320,11 @@ Najkôr sa musíme vrátiť späť na Plochu: {% filename %}command-line{% endfilename %} > cd .. - + -Pomocou `..` s príkazom `cd` zmeníš svoj aktuálny adresár na rodičovský adresár (to je ten adresár, v ktorom sa nachádza tvoj aktuálny adresár). +Pomocou `..` s príkazom `cd` zmeníš svoj aktuálny priečinok na rodičovský priečinok (čiže priečinok, ktorý obsahuje tvoj súčasný priečinok). Skontroluj, kde sa nachádzaš: @@ -323,7 +334,7 @@ Skontroluj, kde sa nachádzaš: $ pwd /Users/olasitarska/Desktop - + @@ -333,20 +344,20 @@ Skontroluj, kde sa nachádzaš: > cd C:\Users\olasitarska\Desktop - + -Je na čase zmazať adresár `pokus`: +Je načase zmazať priečinok `pokus`: -> **Pozor**: mazanie súborov pomocou `del` `rmdir` alebo `rm` je neodvolateľné, teda *odstránené súbory budú navždy odtranené*! Takže s týmito príkazmi buď opatrná. +> **Pozor**: mazanie súborov pomocou `del`, `rmdir` alebo `rm` je neodvolateľné, teda *odstránené súbory budú odstránené navždy*! Takže s týmito príkazmi buď opatrná. {% filename %}command-line{% endfilename %} $ rm -r pokus - + @@ -354,20 +365,20 @@ Je na čase zmazať adresár `pokus`: {% filename %}command-line{% endfilename %} - > rmdir /S pous + > rmdir /S pokus pokus, Are you sure ? Y - + -Hotovo! Uistime sa, či je to naozaj vymazané: +Hotovo! Uistime sa, či je naozaj vymazaný: {% filename %}command-line{% endfilename %} $ ls - + @@ -376,20 +387,20 @@ Hotovo! Uistime sa, či je to naozaj vymazané: {% filename %}command-line{% endfilename %} > dir - + ### Ukončenie -Nateraz je to všetko! Môžeš pokojne zatvoriť príkazový riadok. Urobme to hackersky, dobre? :) +Nateraz je to všetko! Môžeš pokojne zatvoriť príkazový riadok. Urobme to hackersky, čo povieš? :) {% filename %}command-line{% endfilename %} $ exit - + @@ -398,7 +409,7 @@ Nateraz je to všetko! Môžeš pokojne zatvoriť príkazový riadok. Urobme to {% filename %}command-line{% endfilename %} > exit - + @@ -408,17 +419,18 @@ Super, čo? :) Tu je prehľad niektorých užitočných príkazov: -| Príkaz (Windows) | Príkaz (Mac OS / Linux) | Popis | Príklad | -| ---------------- | ----------------------- | ------------------------------- | ------------------------------------------------- | -| exit | exit | zatvorí okno | **exit** | -| cd | cd | zmení adresár | **cd test** | -| cd | pwd | ukáž akutuálny adresár | **cd** (Windows) alebo **pwd** (Mac OS / Linux) | -| dir | ls | vypíše zoznam adresárov/súborov | **dir** | -| copy | cp | kopíruje súbor | **copy c:\test\test.txt c:\windows\test.txt** | -| move | mv | presunie súbor | **move c:\test\test.txt c:\windows\test.txt** | -| mkdir | mkdir | vytvorí nový adresár | **mkdir testdirectory** | -| del | rm | vymazať súbor | **del c:\test\test.txt** | -| rmdir /S | rm -r | odstráni adresár/súbor | **rm -r testdirectory** | +| Príkaz (Windows) | Príkaz (Mac OS / Linux) | Popis | Príklad | +| ----------------- | ----------------------- | -------------------------------- | ----------------------------------------------------- | +| exit | exit | zatvorí okno | **exit** | +| cd | cd | zmení priečinok | **cd test** | +| cd | pwd | ukáže aktuálny priečinok | **cd** (Windows) alebo **pwd** (Mac OS / Linux) | +| dir | ls | vypíše zoznam priečinkov/súborov | **dir** | +| copy | cp | skopíruje súbor | **copy c:\test\test.txt c:\windows\test.txt** | +| move | mv | presunie súbor | **move c:\test\test.txt c:\windows\test.txt** | +| mkdir | mkdir | vytvorí nový priečinok | **mkdir testdirectory** | +| rmdir (alebo del) | rm | odstráni súbor | **del c:\test\test.txt** | +| rmdir /S | rm -r | odstráni priečinok | **rm -r testdirectory** | +| [CMD] /? | man [CMD] | ponúkne nápovedu k príkazu | **cd /?** (Windows) alebo **man cd** (Mac OS / Linux) | Toto je len veľmi malá časť príkazov, ktoré môžeš spustiť vo svojom príkazovom riadku, ale dnes budeš potrebovať len tieto. @@ -426,4 +438,4 @@ Ak ťa to zaujalo, na [ss64.com](http://ss64.com) nájdeš kompletný prehľad p ## Pripravená? -Vrhnime sa na Python! +Vrhnime sa na Python! \ No newline at end of file diff --git a/sk/intro_to_command_line/open_instructions.md b/sk/intro_to_command_line/open_instructions.md new file mode 100644 index 00000000000..14022fdf3fa --- /dev/null +++ b/sk/intro_to_command_line/open_instructions.md @@ -0,0 +1,28 @@ + + +V závislosti od tvojej verzie Windowsu a tvojej klávesnice by jedna z týchto možností mala otvoriť príkazové okno (možno budeš musieť trochu experimentovať, ale nemusíš skúšať všetky tieto možnosti): + +- Prejdi do ponuky Štart alebo na plochu a do vyhľadávacieho poľa zadaj "Príkazový riadok" alebo "Command Prompt". +- Prejdi na Štart menu → Systém Windows → Príkazový riadok. +- Choď na menu Štart → Všetky programy → Príslušenstvo → Príkazový riadok. +- Prejdi na plochu, podrž myš v ľavom dolnom rohu obrazovky a klikni na šípku nadol, ktorá sa zobrazí (na dotykovej obrazovke namiesto toho rýchlo prejdi prstom z dolnej časti obrazovky nahor). Mal by sa ti zobraziť zoznam aplikácií. Klikni na príkazový riadok (Command Prompt) v sekcii Windows System. +- Podrž špeciálnu klávesu Windows na klávesnici a stlač klávesu "X". Vyber "Príkazový riadok" z kontextového menu. +- Podrž klávesu Windows a stlač tlačidlo "R", kým sa ti nezobrazí okno "Run". Do poľa zadaj "cmd" a klikni na tlačidlo OK. + +![Zadaj "cmd" v okne "Run"](../python_installation/images/windows-plus-r.png) + +Neskôr v tutoriáli budeš potrebovať mať otvorené dve príkazové okná súčasne. Avšak na niektorých verziách Windowsu ak už máš otvorené jedno okno príkazového riadku a pokúsiš sa otvoriť druhé rovnakým spôsobom, len ťa to presmeruje na to, ktoré už máš otvorené. Vyskúšaj si to na svojom počítači! Ak dostaneš len svoje už existujúce príkazové okno, skús nové otvoriť použitím iného spôsobu zo zoznamu vyššie. Aspoň jeden z nich by ti mal otvoriť nové okno. + + + + + +Choď do Aplikácie → Nástroje → Terminál. + + + + + +Cesta je pravdepodobne Aplikácie → Príslušenstvo → Terminál alebo Aplikácie → Systém → Terminál, ale závisí to od tvojho systému. Ak to tam nie je, skús si to vygoogliť. :) + + \ No newline at end of file diff --git a/sk/python_installation/README.md b/sk/python_installation/README.md old mode 100755 new mode 100644 index 081cff5c770..012aa34c3e5 --- a/sk/python_installation/README.md +++ b/sk/python_installation/README.md @@ -2,14 +2,14 @@ Konečne sme tu! -Na začiatok si povedzme, čo je Python. Python je veľmi obľúbený programovací jazyk, ktorý možno využiť na vytváranie webstránok, hier, vedeckých programov, grafiky a veľa, veľa ďalšieho. +Na začiatok si povedzme, čo je Python. Python je veľmi obľúbený programovací jazyk, ktorý možno využiť na vytváranie webstránok, hier, vedeckých programov, grafiky a mnoho iných vecí. -Python vznikol koncom 80-tych rokov minulého storočia a jeho hlavným cieľom bola čitateľnosť pre ľudí (nie len pre stroje!). Toto je dôvod, prečo vyzerá jednoduchšie, než ostatné programovacie jazyky, ale netráp sa - napriek tomu Python je naozaj silný! +Python vznikol koncom 80.-tych rokov minulého storočia a jeho hlavným cieľom bola čitateľnosť pre ľudí (nie len pre stroje!). Toto je dôvod, prečo vyzerá jednoduchšie, než ostatné programovacie jazyky, ale netráp sa - napriek tomu Python je fakt schopný! # Inštalácia Pythonu > **Poznámka:** Ak používaš Chromebook, preskoč túto kapitolu a postupuj podľa pokynov na [inštaláciu na Chromebookoch](../chromebook_setup/README.md). > -> **Poznámka** Ak si sa už cez kroky inštalácie prepracovala, nemusíš to robiť znova - môžeš preskočiť rovno na nasledujúcu kapitolu! +> **Poznámka** Ak si už prešla [inštalačnými pokynmi](../installation/README.md), tak toto už máš hotové a môžeš ísť rovno na ďalšiu kapitolu! {% include "/python_installation/instructions.md" %} \ No newline at end of file diff --git a/sk/python_installation/instructions.md b/sk/python_installation/instructions.md old mode 100755 new mode 100644 index 2049ad33084..997c9d09105 --- a/sk/python_installation/instructions.md +++ b/sk/python_installation/instructions.md @@ -1,41 +1,43 @@ -> Pre čitateľov doma: Táto kapitola je spracovaná v [Installing Python & Code Editor](https://www.youtube.com/watch?v=pVTaqzKZCdA) videu. +> Pre čitateľov a čitateľky doma: Táto kapitola je spracovaná vo videu [Installing Python & Code Editor](https://www.youtube.com/watch?v=pVTaqzKZCdA). > > Táto časť je založená na príručke Geek Girls Carrots (https://github.com/ggcarrots/django-carrots) -Django je napísané v Pythone. Python potrebujeme aby sme urobili hocičo vv Djangu. Začnime tým, že si ho nainštalujeme. Chceme aby si si nainštalovala Python 3.6, takže ak máš staršiu verziu budeš si ju musieť aktualizovať. +Django je napísané v jazyku Python. Python potrebujeme na všetko, čo chceme v Djangu robiť. Poďme ho teda najprv nainštalovať! Chceme, aby si si nainštalovala Python 3, takže ak máš staršiu verziu, budeš ju musieť upgradovať. Ak už máš verziu {{ book.py_min_version }} alebo vyššiu, malo by to byť v poriadku. - +Nainštaluj si, prosím, Python nasledovne, a to aj v prípade, že už máš na svojom počítači nainštalovanú Anacondu. -Najprv si over, či tvoj počítač beží na 32-bitovej alebo 64-bitovej verzii Windows-u, stlačením Windows tlačidlo + Pause/Break tlačidlo, čo otvorí informácie o tvojom systéme. Pozri sa na riadok "Typ systému". Python pre Windows si môžeš stiahnuť z webstránky https://www.python.org/downloads/windows/. Klikni na "Latest Python 3 Release - Python x.x.x" link. Ak tvoj počítač beží na **64-bitovej** verzii Windows-u, stiahni si **Windows x86-64 executable installer**. Inak si stiahni **Windows x86 executable installer**. Po stiahnutí inštalačného súboru, spusti ho (dvojklikom) a postupuj podľa inštrukcií v ňom. + -Pozor na jednu vec: počas inštalácie si všimni okno označené "Setup". Uisti sa, že si označila "Add Python 3.6 to PATH" a klikni na "Install Now", ako je znázornené tu: +Najprv si zisti, či na tvojom počítači beží 32-bitová alebo 64-bitová verzia Windowsu. Môžeš sa to dozvedieť v Systémových informáciách v časti Typ systému. Vieš sa tam dostať jedným z nasledujúcich spôsobov: -![Nezabudni pridať Python do Cesty](../python_installation/images/python-installation-options.png) +* Stlač klávesu Windows a klávesu Pause/Break naraz +* Otvor Ovládací panel z windowsového menu, potom prejdi na Systém a zabezpečenia, potom Systém +* Stlač tlačidlo Windows a potom prejdi na položku Nastavenia > Systém > Informácie +* Vyhľadaj "System information" cez Štart menu. Stlač tlačidlo Štart alebo klávesu Windows a začni písať `System Information`. Ako začneš písať, začne ti to dávať tipy. Keď sa položka objaví, vyber ju. -V ďalších krokoch, budeš používať Windows príkazový riadok (o ktorom ti tiež povieme viac). Zatiaľ, keď potrebuješ zadať nejake príkazy, choď do Štart → Systém Windows → Príkazový riadok. Alebo môžes stlačiť a držať tlačidlo so znakom Windows a k tomu stlačiť tlačidlo "R" kým sa neobjaví "Run" okno. Aby si spustila Príkazový riadok, zadaj "cmd" a stlač enter v "Run" okne. (No novších verziách Windows, možno budeš musieť vyhľadať "Command Prompt" ("Príkazový riadok"), lebo je niekedý skrytý.) +Python pre Windows si môžeš stiahnuť z webstránky https://www.python.org/downloads/windows/. Klikni na link "Latest Python 3 Release - Python x.x.x". Ak tvoj počítač beží na **64-bitovej** verzii Windowsu, stiahni si **Windows x86-64 executable installer**. V opačnom prípade si stiahni **Windows x86 executable installer**. Po stiahnutí inštalačného súboru ho spusti (dvojklikom) a postupuj podľa inštrukcií v ňom. -![Zadaj "cmd" v "Run" okne](../python_installation/images/windows-plus-r.png) +Jedna vec, na ktorú treba dávať pozor: Počas inštalácie si všimni okno označené "Setup". Uisti sa, že začiarkneš políčko "Pridať Python {{ book.py_version }} do PATH" alebo "Pridať Python do premenných prostredia" (alebo "Add Python {{ book.py_version }} to PATH") a klikneš na "Inštalovať" ("Install Now"), ako je zobrazené tu (môže to vyzerať trochu inak, ak inštaluješ inú verziu): -Poznámka: Ak používaš staršiu verziu systému Windows (7, Vista alebo ktorúkoľvek staršú verziu) a Python 3.6.x Inštalátor skončí s chybovou hláškou, môžeš skúsiť: +![Nezabudni pridať Python do PATH](../python_installation/images/python-installation-options.png) -1. nainštalovať všetky Windows aktualizácie a skúsiť nainštalovať Python 3.6 znovu; alebo -2. nainštalovať [staršiu Python verziu](https://www.python.org/downloads/windows/), napr., [3.4.6](https://www.python.org/downloads/release/python-346/). +Po dokončení inštalácie sa môže zobraziť dialógové okno s odkazom, pomocou ktorého sa môžeš dozvedieť viac o Pythone alebo o verzii, ktorú si nainštalovala. Toto dialógové okno zatvor alebo zruš - na to, aby si sa dozvedela viac, je tu tento tutoriál! -Ak si nainštaluješ staršiu Python verziu, inštalačně okno môže vypadať inak ako je to zobrazené hore. Uisti sa, že označíš "Add python.exe to Path", následne klikni na tlačidlo vľavo a zvoľ "Will be installed on local hard drive" ("Bude nainštalované na lokálny pevný disk"): +Poznámka: Ak si na staršej verzii Windowsu (7, Vista alebo niečo staršie) a inštalácia Pythonu {{ book.py_version }} padne s chybou, skús nainštalovať najnovšie updaty Windowsu a pokús sa nainštalovať Python znova. Ak problém pretrváva, skús nainštalovať Python {{ book.py_min_release }} z [Python.org](https://www.python.org/downloads/windows/). -![Pridaj Python do Path, staršie verzie](../python_installation/images/add_python_to_windows_path.png) +> Django {{ book.django_version }} vyžaduje Python {{ book.py_min_version }} alebo novší, ktorý nebeží na Windowse XP a nižších verziách. -> **Poznámka:** Pred inštaláciou Python na OS X, mala by si povoliť v nastaveniach svojho Mac-u inštaláciu balíkov, ktoré nie sú z App Store. Choď do System Preferences (je to v priečinku Applications), klikni na "Security & Privacy," a potom na tab "General". Ak nastavenie: "Allow apps downloaded from:" je nastavené na "Mac App Store," zmeň ho na "Mac App Store and identified developers." +> **Poznámka:** Pred inštaláciou Pythonu na OS X sa uisti, že nastavenia tvojho Macu ti povoľujú inštaláciu balíkov, ktoré nie sú z App Storu. Choď do System Preferences (je to v priečinku Applications), klikni na "Security & Privacy," a potom na záložku "General". Ak možnosť "Allow apps downloaded from:" je nastavená na "Mac App Store," zmeň ho na "Mac App Store and identified developers." -Inštalačný program Pythonu si môžeš stiahnuť zo stránky https://www.python.org/downloads/release/python-361/: +Potom musíš ísť na stránku https://www.python.org/downloads/mac-osx/ a stiahnuť si najnovší Python: * Stiahni si súbor s *Mac OS X 64/32-bitovým inštalátorom*, -* Dvojklikom na *python-3.6.1-macosx10.6.pkg* spusti inštalačný program. +* Dvojklikom na *python-{{ book.py_release }}-macosx10.9.pkg* spusti inštalačný program. @@ -47,10 +49,17 @@ Je veľmi pravdepodobné, že Python už máš predinštalovaný. Pre kontrolu, {% filename %}command-line{% endfilename %} $ python3 --version - Python 3.6.1 + Python {{ book.py_release }} + + +Ak máš inú verziu Pythonu, a to aspoň {{ book.py_min_version }} (napr. {{ book.py_min_release }}), nemusíš upgradovať. Ak Python nainštalovaný nemáš alebo chceš inú verziu, najprv zisti, akú máš linuxovú distribúciu, nasledovne: + +{% filename %}command-line{% endfilename %} + + $ grep '^NAME=' /etc/os-release -Ak máš inú mikro verziu Pythonu nainštalovanú, e.g. 3.6.0, nemusíš ju aktualizovať. Ak nemáš Python nainštalovaný, alebo ak chceš inú verziu, môžeš ho nainštalovať takto: +Potom podľa toho, čo si zistila, nasleduj konkrétne inštalačné pokyny pod touto sekciou. @@ -60,7 +69,7 @@ Zadaj do konzoly tento príkaz: {% filename %}command-line{% endfilename %} - $ sudo apt install python3.6 + $ sudo apt install python3 @@ -75,7 +84,7 @@ Použi v konzole tento príkaz: $ sudo dnf install python3 -Ak používaš staršiu verziu Fedora, možno sa ti objaví chyba, že príkaz `dnf` neexistuje. V tomto prípade musíš použiť príkaz yum. +Ak používaš staršiu verziu Fedory, možno sa ti objaví chyba, že príkaz `dnf` neexistuje. V tom prípade musíš použiť príkaz `yum`. @@ -96,11 +105,13 @@ Ak si chceš overiť, že inštalácia bola úspešná, otvor príkazový riadok {% filename %}command-line{% endfilename %} $ python3 --version - Python 3.6.1 + Python {{ book.py_release }} -**POZNÁMKA:** Ak používaš Windows a objavý sa ti chybová hláška, že `python3` nebol najdený, skús použiť `python` (bez čísla `3`) a over či to náhodou nie je Python 3.6 verzia. +Zobrazená verzia sa môže líšiť od verzie {{ book.py_release }} - mala by zodpovedať verzii, ktorú si nainštalovala. + +**POZNÁMKA:** Ak používaš Windows a objaví sa ti chybová hláška, že `python3` nebol najdený, skús použiť `python` (bez čísla `3`) a over, či to náhodou nie je Python {{ book.py_min_version }} alebo vyšší. Ak ani to nefunguje, otvor si nový príkazový riadok a skús znova - stáva sa to, keď robíš s príkazovým riadkom, ktorý bol otvorený ešte predtým, než sme nainštalovali Python. * * * -V prípade nejakých pochybností, alebo ak sa niečo pokazilo a nemáš tušenie, čo robiť ďalej - opýtaj sa svojho trénera! Niekedy veci nejdú úplne hladko a je lepšie požiadať o pomoc niekoho, kto má viac skúseností. \ No newline at end of file +V prípade pochybností alebo ak sa niečo pokazilo a nemáš tušenie, čo robiť ďalej - opýtaj sa svojej mentorky alebo mentora! Niekedy veci nejdú úplne hladko a je lepšie požiadať o pomoc niekoho, kto má viac skúseností. \ No newline at end of file diff --git a/sk/python_introduction/README.md b/sk/python_introduction/README.md old mode 100755 new mode 100644 index 9b0f8722dd5..5e44488e527 --- a/sk/python_introduction/README.md +++ b/sk/python_introduction/README.md @@ -1,34 +1,20 @@ +{% set warning_icon = '' %} + # Úvod do jazyka Python > Časť tejto kapitoly je založená na tutoriáli Geek Girls Carrots (https://github.com/ggcarrots/django-carrots). Poďme napísať nejaký kód! -## Python prompt +{% include "/python_introduction/prompt.md" %} -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: Integers, Strings, Lists, Variables and Errors](https://www.youtube.com/watch?v=MO63L4s-20U) videu. +## Tvoj prvý príkaz v Pythone! -Aby sme mohli začať s Pythonom, musíte otvoriť *príkazový riadok* (angl. command line) na svojom počítači. Už by ste mali vedieť ako sa to robí -- naučili ste sa to v [ Úvode do príkazového riadku](../intro_to_command_line/README.md). +Po spustení príkazu python sa začiatok nášho príkazového riadku (nazývaný aj prompt) zmenil na `>>>`. Toto pre nás znamená, že odteraz by sme mali písať príkazy iba v jazyku Python. Ty sama nemusíš vždy písať `>>>`, Python to urobí za teba. -Ak ste hotoví, pokračujte s inštrukciami nižšie. +Ak chceš z pythonovej konzoly kedykoľvek odísť, napíš `exit()` alebo použi skratku `Ctrl + Z` vo Windowse a `Ctrl + D` v Macu/Linuxe. Potom už nebudeš vidieť `>>>`. -Chceme otvoriť Python konzolu, takže napíšte `python` na Windowse alebo `python3` na Mac alebo OS/Linux a stlačte `enter`. - -{% filename %}command-line{% endfilename %} - - $ python3 - Python 3.6.1 (...) - Type "help", "copyright", "credits" or "license" for more information. - >>> - - -## Váš prvý príkaz v Pythone! - -Po spustení príkazu Python sa prompt zmenil na `>>>`. Pre nás to znamená že odteraz by sme mali písať príkazy iba v jazyku Python. Nemusíte písať `>>>` - Python to urobí pre Vás. - -Ak by ste chceli kedykoľvek ukončiť konzolu Pythonu, len napíšte `exit()` alebo môžete použiť aj skratku `Ctrl + Z` vo Windowse alebo `Ctrl + D` pre Mac/Linux. Potom už nebudete vidieť toto: `>>>`. - -Zatiaľ nechceme opustiť Python konzolu. Chceme sa o nej dozvedieť viac. Začnime tým, že skúsime matematiku, napr. ` 2 + 3 `a stlač `enter`. +Zatiaľ ale z pythonovej konzoly odchádzať nechceme. Chceme sa o nej dozvedieť viac! Začnime tým, že napíšeme niečo jednoduché matematické ako `2 + 3` a stlačíme `enter`. {% filename %}command-line{% endfilename %} @@ -37,7 +23,7 @@ Zatiaľ nechceme opustiť Python konzolu. Chceme sa o nej dozvedieť viac. Začn 5 ``` -Super! Vidíte ako vyskočilo riešenie? Python vie počítať! Môžete skúsiť aj ďalšie príkazy, ako: +Pekne! Vidíš, ako vyskočilo riešenie? Python vie počítať! Môžeš skúsiť iné príkazy ako: - `4 * 5` - `5 - 1` @@ -50,33 +36,33 @@ Aby sme vypočítali mocninu, povedzme 2 na tretiu, zadáme: {% filename %}comma 8 ``` -Bavte sa s tým trošku, potom sa vráťte späť k nám. :) +Trošku sa s tým pohraj a potom sa vráť späť . :) -Ako vidíte, Python je dobrá kalkulačka. A ak ste zvedaví, čo všetko vie ešte… +Ako môžeš vidieť, Python je skvelá kalkulačka. A ak si zvedavá, čo všetko ešte dokáže... ## Reťazce -Čo tak vaše meno? Napíšte svoje meno v úvodzovkách: +Čo tak napríklad tvoje meno? Napíš svoje meno v úvodzovkách: {% filename %}command-line{% endfilename %} ```python >>> "Ola" -"Ola" +'Ola' ``` -Práve ste vytvorili svoj prvý reťazec! Je postupnosť znakov, ktoré môžu byť spracované počítačom. Reťazec musí vždy začínať a končíť s rovnakým znakom. Sú to jednoduché (`'`) alebo dvojité (`"`) úvodzovky (nie je medzi nimi žiadny rozdiel!). Úvodzovky naznačujú, že to čo je medzi nimi je reťazec (string). +Práve si vytvorila svoj prvý reťazec (string)! Je to postupnosť znakov, ktoré môžu byť spracované počítačom. Reťazec musí vždy začínať a končiť rovnakým znakom. Buď jednoduchými (`'`) alebo dvojitými (`"`) úvodzovkami (nie je medzi nimi žiadny rozdiel!). Úvodzovky naznačujú, že to, čo je medzi nimi, je reťazec. Reťazce možno spájať dohromady. Skús toto: {% filename %}command-line{% endfilename %} ```python ->>> "Ahoj" + "Ola" +>>> "Ahoj " + "Ola" 'Ahoj Ola' ``` -Reťazce môžete násobiť aj s číslom: +Reťazce môžeš tiež vynásobiť číslom: {% filename %}command-line{% endfilename %} @@ -85,7 +71,7 @@ Reťazce môžete násobiť aj s číslom: 'OlaOlaOla' ``` -Ak potrebujete dať apostrof do vnútra reťazca, máte dva spôsoby, ako to urobiť. +Ak potrebuješ mať vo vnútri reťazca apostrof, máš dve možnosti, ako to spraviť. Použitím dvojitých úvodzoviek: @@ -96,7 +82,7 @@ Použitím dvojitých úvodzoviek: "Runnin' down the hill" ``` -alebo pomocou spätného lomítka - tento znak (ak je napísaný pred úvodzovkou) povie, že ona je súčasťou reťazca a nie koniec / začiatok reťazca (``): +alebo pomocou spätného lomítka (`\`) - tomuto sa anglicky hovorí escaping: {% filename %}command-line{% endfilename %} @@ -105,7 +91,7 @@ alebo pomocou spätného lomítka - tento znak (ak je napísaný pred úvodzovko "Runnin' down the hill" ``` -Pekné, hm? Ak chcete vidieť svoje meno veľkými písmenami, jednoducho zadajte: +Fajn, nie? Ak chceš vidieť svoje meno napísané veľkými písmenami, zadaj: {% filename %}command-line{% endfilename %} @@ -114,9 +100,9 @@ Pekné, hm? Ak chcete vidieť svoje meno veľkými písmenami, jednoducho zadajt 'OLA' ``` -Práve si použila `upper` **metódu** na reťazci! Metóda (ako `upper()`) je postupnosť inštrukcií, ktoré Python vykonáva na danom objekte (`"Ola"`), potom, čo ju zavoláš. +Práve si na svojom reťazci použila **metódu** `upper`! Metóda (ako `upper()`) predstavuje postupnosť inštrukcií, ktoré Python vykoná na danom objekte (`"Ola"`), keď ju zavoláš. -Ak chcete poznať počet písmen, ktoré sú obsiahnuté vo vašom mene, tak na to má Python **funkciu** tiež! +Ak chceš vedieť, koľko má tvoje meno písmen, aj na to máme **funkciu**! {% filename %}command-line{% endfilename %} @@ -125,24 +111,24 @@ Ak chcete poznať počet písmen, ktoré sú obsiahnuté vo vašom mene, tak na 3 ``` -Ste zvedaví, prečo voláme niekedy funkciu s bodkou (`.`) na konci reťazca (ako `"Ola".upper()`) a niekedy najprv voláme funkciu a reťazec vložíme do zátvoriek? V niektorých prípadoch funkcie patria k objektom, ako napr. `upper()`, čo môže byt vykonaná len na reťazcoch. V takomto prípade sa tieto funkcie volajú **metódy**. Inokedy funkcie nepatria k žiadnemu konkrétnemu objektu a môžu byť použité na rôzne typy objektov, rovnako ako `len()`. Preto zadáme `"Ola"` ako parameter pre funkciu `len`. +Rozmýšľaš, prečo občas voláme funkcie pomocou `.` na konci reťazca (napr. `"Ola".upper()`) a inokedy najprv zavoláme funkciu a reťazec dáme do zátvoriek? Ide o to, že v niektorých prípadoch funkcie patria k objektom, ako napríklad `upper()`, čo je funkcia, ktorá môže byť vykonaná len na reťazcoch. V takomto prípade sa tieto funkcie volajú **metódy**. Inokedy funkcie nepatria k žiadnemu konkrétnemu objektu a môžu byť použité na rôzne typy objektov, ako je to v prípade `len()`. Preto posielame reťazec `"Ola"` ako parameter funkcii `len`. ### Zhrnutie -OK, dosť už reťazcoch. Zatiaľ ste sa naučili o: +OK, dosť už o reťazcoch. Zatiaľ sme sa niečo naučili o nasledovnom: - **prompt** - píšeme príkazy (kód) do Python promptu, z čoho dostaneme výsledky zase v jazyku Python - **čísla a reťazce** - v Pythone sú čísla použité pre počítanie a reťazce pre textové objekty - **operátory** - ako `+` alebo `*`, z daných hodnôt vyrobia novú hodnotu - **funkcie** - napr. `upper()` alebo `len()`, vykonávajú činnosti na objektoch. -Toto sú základy každého programovacieho jazyka. Ste pripravení na niečo ťažšie? Stavíme sa, že áno! +Toto sú základy každého programovacieho jazyka. Si pripravená na niečo ťažšie? Stavíme sa, že áno! ## Chyby -Teraz skúsme niečo nové. Je možné zistiť dĺžku nejakého čísla rovnako ako sme to robili s našim menom? Napíšte `len(304023)` a stlačte `enter`: +Teraz skúsme niečo nové. Keď už vieme zistiť dĺžku reťazca, vieme to isté spraviť s číslom? Skús napísať `len(304023)` a stlač `enter`: -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} ```python >>> len(304023) @@ -151,7 +137,9 @@ Traceback (most recent call last): TypeError: object of type 'int' has no len() ``` -Dostali sme našu prvú chybovú hlášku! Hovorí nám, že objekty typu "int" (celé čísla, angl. integers) nemajú dĺžku. Tak čo môžeme teraz robiť? Možno by sme mohli napísať naše číslo ako reťazec? Reťazce majú dĺžku, pravda? +Dostali sme našu prvú chybu! Keď uvidíš ikonku {{ warning_icon }}, ber to ako znamenie, že kód, ktorý ideš spustiť, nebude bežať tak, ako by sa dalo očakávať. Robenie chýb (aj úmyselných) je dôležitá súčasť učenia sa! + +Správa nám hovorí, že objekty typu "int" (integer, alebo slovensky celé číslo) nemajú dĺžku. Čo s tým? Možno by sme mohli naše číslo zapísať ako reťazec? Reťazce predsa dĺžku majú, nie? {% filename %}command-line{% endfilename %} @@ -160,16 +148,16 @@ Dostali sme našu prvú chybovú hlášku! Hovorí nám, že objekty typu "int" 6 ``` -Funguje to! Použili sme funkciu `str` vo vnútri funkcie `len`. Funkcia `str()` prevedie všetko na reťazce. +Funguje to! Použili sme funkciu `str` vovnútri funkcie `len`. `str()` zmení všetko na reťazec. -- Funkcia `str` prevedie (konvertuje) všetko na **reťazce** (angl. string) +- Funkcia `str` prevedie všetko na **reťazec** - Funkcia `int` prevedie všetko na **int** (celé čísla) -> Dôležité: je možné konvertovať čísla na reťazce, ale opačne sa to nedá vždy - inak čo by bolo napr. `int('hello')`? +> Dôležité: čísla vieme premeniť na text, ale text nevieme vždy previesť na číslo - veď čo by vôbec malo byť `int('ahoj')`? ## Premenné -Veľmi dôležitý pojem v programovaní je pojem premennej. Premenná je nič iné ako názov niečoho, čo môžeme použiť aj neskoršie v programe. Programátori používajú premenné aby v nich ukladali dáta, aby ich zdrojový kód bol prehľadnejší a aby nemuseli všetko držať v hlave. +Veľmi dôležitý koncept v programovaní je pojem premennej (variable). Premenná nie je nič iné ako priradenie názvu niečomu, aby sme to mohli použiť neskôr. Programátorky a programátori používajú premenné, aby v nich ukladali dáta, aby ich zdrojový kód bol prehľadnejší, a aby nemuseli všetko držať v hlave. Povedzme, že chceme vytvoriť novú premennú s názvom `meno`: @@ -179,9 +167,9 @@ Povedzme, že chceme vytvoriť novú premennú s názvom `meno`: >>> meno = "Ola" ``` -Zadáme meno sa rovná Ola. +Napíšeme, že meno sa rovná Ola. -Ako ste si to zbadali už, váš program nič nevrátil späť ako to robil v predchádzajúcich príkladoch. Tak ako vieme, či tá premenná existuje? Jednoducho napíšte `meno` a stlačte `enter`: +Asi si si všimla, že tentokrát program nič nevypísal. Ako teda vieme, že naša premenná naozaj existuje? Napíš `meno` a stlač `enter`: {% filename %}command-line{% endfilename %} @@ -190,26 +178,26 @@ Ako ste si to zbadali už, váš program nič nevrátil späť ako to robil v pr 'Ola' ``` -Hurá! Vaša prvá premenná! :) Vždy je možné zmeniť jej obsah: +Jupí! Tvoja prvá premenná! :) Vždy môžeš zmeniť, na čo ukazuje: {% filename %}command-line{% endfilename %} ```python ->>> meno = "Sonja" +>>> meno = "Sona" >>> meno -'Sonja' +'Sona' ``` -Môžete ju použiť aj vo funkciách: +Môžeš ju tiež použiť vo funkciách: {% filename %}command-line{% endfilename %} ```python >>> len(meno) -5 +4 ``` -Úžasné, že? Samozrejme premenné môžu byť hocičo, takže aj čísla! Skúste toto: +Super, nie? Premenné môžu obsahovať čokoľvek, aj čísla! Skús toto: {% filename %}command-line{% endfilename %} @@ -220,25 +208,25 @@ Môžete ju použiť aj vo funkciách: 24 ``` -Ale čo by sa stalo, keby sme použili zlý názov? Uhádnete, čo sa stane? Skúsme! +Ale čo by sa stalo, keby sme použili nesprávny názov? Uhádneš, čo sa stane? Vyskúšajme! -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} ```python ->>> mesto = "Tokyo" +>>> mesto = "Tokio" >>> mseto Traceback (most recent call last): File "", line 1, in NameError: name 'mseto' is not defined ``` -Chyba! Ako vidíte, Python má viacero chýb a táto jedna sa volá **NameError**. Python vám hodí túto chybu ak sa pokúsite použiť premennú ktorá ešte nebola definovaná. Ak sa stretnete s touto chybou v budúcnosti, vždy skontrolujte svoj kód, či nemáte preklep v niektorom názve. +Chyba! Ako vidíš, Python má viacero druhov chýb a táto konkrétna sa volá **NameError**. Python ti ju vyhodí, pokiaľ sa pokúsiš použiť premennú, ktorá ešte nebola definovaná. Ak sa s touto chybou stretneš v budúcnosti, skontroluj si kód, či nemáš preklep v nejakom názve. -Hrajte sa s tým trošku, a potom uvidíme čo môžeme ešte urobiť! +Pohraj sa s tým trošku a vyskúšaj si, čo všetko sa s tým dá urobiť! ## Funkcia print -Vyskúšajte toto: +Skús toto: {% filename %}command-line{% endfilename %} @@ -250,15 +238,15 @@ Vyskúšajte toto: Maria ``` -Ak zadáte len `meno`, Python interpreter odpovie reťazcovou *reprezentáciou* premennej 'meno', teda písmenami M-a-r-i-a medzi jednoduchými úvodzovkami, ''. Keď napíšete `print(meno)`, Python vypíše obsah premennej na obrazovku, bez úvodzoviek, čo vyzerá krajšie. +Ak napíšeš len `meno`, pythonový interpreter ti odpovie reťazcovou *reprezentáciou* premennej "meno", čo sú písmená M-a-r-i-a, obklopené jednoduchými úvodzovkami ''. Keď povieš `print(meno)`, Python vypíše (print) obsah premennej na obrazovku bez úvodzoviek, čo vyzerá úhľadnejšie. -Ako uvidíme neskôr, funkcia `print()` je tiež užitočná, keď chceme tlačiť veci z funkcií, alebo ak chceme tlačiť veci na viacerých riadkoch. +Ako uvidíme neskôr, funkcia `print()` tiež príde vhod, keď chceme vypisovať niečo zvnútra funkcie alebo keď chceme vypisovať veci na viacerých riadkoch. ## Zoznamy -Okrem reťazcov a celých čísel, má Python všetky možné typy objektov. Teraz sa zoznámime s typom, ktorý sa volá **zoznam** (list). Zoznamy sú presne to, čo si myslíte, že sú: objekty, ktoré sú zoznamami iných objektov. :) +Okrem reťazcov a celých čísel má Python všemožné typy objektov. Teraz sa zoznámime s typom, ktorý sa volá **zoznam** (list). Zoznamy sú presne to, čo by si povedala, že sú: objekty, ktoré sú zoznamami iných objektov. :) -Poďme na to, vytvorte zoznam: +Poď na to, vytvor zoznam: {% filename %}command-line{% endfilename %} @@ -267,7 +255,7 @@ Poďme na to, vytvorte zoznam: [] ``` -Áno, tento zoznam je prázdny. Nie veľmi užitočné, však? Vytvorme zoznam s číslami lotérie. Nechceme sa dokola opakovať, takže ho hneď aj priradíme do premennej: +Áno, tento zoznam je prázdny. To nám nie je na veľa, že? Vytvorme radšej zoznam s číslami do lotérie. A keďže sa nechceme stále opakovať, hneď ho aj uložíme do premennej: {% filename %}command-line{% endfilename %} @@ -275,7 +263,7 @@ Poďme na to, vytvorte zoznam: >>> loteria = [3, 42, 12, 19, 30, 59] ``` -OK, máme zoznam! Čo s ním môžeme urobiť? Pozrime sa, koľko čísel lotérie máme v zozname. Máte predstavu, ktorú funkciu by sme mohli použiť? Toto už predsa viete! +OK, máme zoznam! Čo s ním môžeme urobiť? Pozrime sa, koľko čísel máme v zozname. Tušíš, akú funkciu by sme na také niečo mohli použiť? Už ju poznáš! {% filename %}command-line{% endfilename %} @@ -284,7 +272,7 @@ OK, máme zoznam! Čo s ním môžeme urobiť? Pozrime sa, koľko čísel lotér 6 ``` -Áno! `len()` vám vráti počet objektov v zozname. Šikovné, nie? Možno by sme to teraz mohli usporiadať: +Presne! `len()` ti vráti počet objektov v zozname. Šikovné, nie? Teraz by sme ho možno mohli usporiadať: {% filename %}command-line{% endfilename %} @@ -292,7 +280,7 @@ OK, máme zoznam! Čo s ním môžeme urobiť? Pozrime sa, koľko čísel lotér >>> loteria.sort() ``` -Nič nám to nevrátilo, iba sa zmenilo poradie poradie, v ktorom sa čísla zobrazia v zozname. Vytlačme to znova a pozrime sa, čo sa stalo: +Nič nám to nevrátilo, iba sa zmenilo poradie, v ktorom sa čísla vyskytujú v zozname. Vypíšme ho znova a pozrime sa, čo sa stalo: {% filename %}command-line{% endfilename %} @@ -301,9 +289,9 @@ Nič nám to nevrátilo, iba sa zmenilo poradie poradie, v ktorom sa čísla zob [3, 12, 19, 30, 42, 59] ``` -Ako vidíte, čísla vo vašom zozname sú teraz zoradené od najnižšej po najvyššiu hodnotu. Gratulujeme! +Ako vidíš, čísla v tvojom zozname sú teraz zoradené od najnižšej po najvyššiu hodnotu. Gratulujeme! -Chceli by sme otočiť poradie? Urobme to! +Možno by sme chceli toto poradie otočiť? Urobme to! {% filename %}command-line{% endfilename %} @@ -313,7 +301,7 @@ Chceli by sme otočiť poradie? Urobme to! [59, 42, 30, 19, 12, 3] ``` -Ak chceš pridať niečo do svojho zoznamu, môžeš to urobiť zadaním tohto príkazu: +Ak chceš do zoznamu niečo pridať, môžeš to urobiť zadaním tohto príkazu: {% filename %}command-line{% endfilename %} @@ -323,7 +311,7 @@ Ak chceš pridať niečo do svojho zoznamu, môžeš to urobiť zadaním tohto p [59, 42, 30, 19, 12, 3, 199] ``` -Ak chcete zobraziť iba prvé číslo, môžete to urobiť pomocou **indexov**. Index je číslo, ktoré hovorí, kde v zozname sa položka nachádza. Programátori radi počítajú od nuly, takž eprvý objekt vo vašom zozname je na indexe 0, ďalší je na 1 a tak ďalej. Vyskúšajte toto: +Ak chceš zobraziť len prvé číslo, môžeš na to použiť **index**. Index je číslo, ktoré hovorí, kde v zozname sa položka nachádza. Programátorky a programátori radi počítajú od 0, takže prvý objekt v našom liste je na indexe 0, druhý na indexe 1 a tak ďalej. Skús toto: {% filename %}command-line{% endfilename %} @@ -334,9 +322,9 @@ Ak chcete zobraziť iba prvé číslo, môžete to urobiť pomocou **indexov**. 42 ``` -Ako vidíte, k rôznym objektom vo vašom zozname môžete pristupovať použitím názvu zoznamu a indexom objektu v hranatých zátvorkách. +Ako môžeš vidieť, môžeš pristupovať k rôznym objektom vo svojom zozname pomocou názvu zoznamu a indexu daného objektu v hranatých zátvorkách. -Aby ste odstránili niečo zo svojho zoznamu, budete potrebovať **indexy**, ako sme sa dozvedeli vyššie a príkaz `pop()`. Vyskúšajme to na príklade a zopakujme si, čo sme sa už naučili; zmažeme prvé číslo v našom zozname. +Ak chceš niečo zo svojho zoznamu odstrániť, budeš potrebovať **indexy**, ako sme sa dozvedeli vyššie, a metódu `pop()`. Vyskúšajme si to na príklade a zopakujme si, čo sme sa už naučili - ideme vymazať prvé číslo v našom zozname. {% filename %}command-line{% endfilename %} @@ -353,15 +341,15 @@ Aby ste odstránili niečo zo svojho zoznamu, budete potrebovať **indexy**, ako Funguje to ako hodinky! -Pre zábavu vyskúšajte aj nejaké iné indexy: 6, 7, 1000, -1, -6 alebo -1000. Skúste predpovedať výsledok predtým ako príkaz použijete. Dávajú výsledky zmysel? +Pre tú srandu vyskúšaj iné indexy, napr. 6, 7, 1000, -1, -6 či -1000. Skús, či sa ti podarí predpovedať, aký bude výsledok, ešte pred tým, ako príkaz spustíš. Dávajú ti výsledky zmysel? -Zoznam všetkých dostupných metód pre zoznamy v tejto kapitole dokumentácie Pythonu: https://docs.python.org/3/tutorial/datastructures.html +Zoznam všetkých dostupných metód pre zoznamy nájdeš v tejto kapitole dokumentácie Pythonu: https://docs.python.org/3/tutorial/datastructures.html ## Slovníky -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: Dictionaries](https://www.youtube.com/watch?v=ZX1CVvZLE6c) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: Dictionaries](https://www.youtube.com/watch?v=ZX1CVvZLE6c). -Slovník je podobný ako zoznam, ale k jeho hodnotám pristupujete vyhľadaním kľúča namiesto číselného indexu. Kľúč môže byť akýkoľvek reťazec alebo číslo. Syntax na definovanie prázdneho slovníka je: +Slovník (dictionary, skrátene dict) je podobný zoznamu, ale k hodnotám pristupuješ pomocou kľúča namiesto číselného indexu. Kľúč môže byť hocijaký reťazec alebo číslo. Syntax na definovanie prázdneho slovníka je: {% filename %}command-line{% endfilename %} @@ -370,23 +358,23 @@ Slovník je podobný ako zoznam, ale k jeho hodnotám pristupujete vyhľadaním {} ``` -To znamená, že ste práve vytvorili prázdny slovník. Hurá! +Toto ti hovorí, že si práve vytvorila prázdny slovník. Hurá! -Teraz skúste napísať nasledujúci príkaz (skúste ale nahradiť hodnoty vlastnými údajmi): +Teraz skús napísať nasledujúci príkaz (skús nahradiť hodnoty vlastnými údajmi): {% filename %}command-line{% endfilename %} ```python ->>> ucastnicka = {'meno': 'Ola', 'krajina': 'Slovensko', 'oblubene_cisla': [7, 42, 92]} +>>> ucastnicka = {'meno': 'Ola', 'krajina': 'Polsko', 'oblubene_cisla': [7, 42, 92]} ``` -Týmto príkazom ste práve vytvorili premennú s názvom `ucastnicka` s tromi pármi kľúč-hodnota: +Týmto príkazom si práve vytvorila premennú s názvom `ucastnicka` s tromi pármi kľúč-hodnota (key-value): -- Kľúč `meno` odkazuje na hodnotu `"Ola"` (objekt typu `reťazec/string`), -- `krajina` odkazuje na `"Slovensko"` (ďalší `reťazec`), -- a `oblubene_cisla` smeruje na `[7, 42, 92]` (`zoznam` s tromi číslami). +- Kľúč `meno` odkazuje na hodnotu `"Ola"` (objekt typu `reťazec`), +- `krajina` odkazuje na `"Polsko"` (ďalší `reťazec`), +- a `oblubene_cisla` ukazuje na `[7, 42, 92]` (`zoznam` s tromi číslami). -Obsah jednotlivých kľúčov môžete skontrolovať touto syntaxou: +Obsah jednotlivých kľúčov môžeš skontrolovať použitím tejto syntaxe: {% filename %}command-line{% endfilename %} @@ -395,11 +383,11 @@ Obsah jednotlivých kľúčov môžete skontrolovať touto syntaxou: Ola ``` -Ako vidíte, podobá sa to na zoznam. Ale nemusíte si pamätať index - stačí meno. +Vidíš, podobá sa to na zoznam. Akurát si nemusíš pamätať index - stačí názov. -Čo sa stane ak si od Pythonu vypýtame hodnotu kľúča, ktorý neexistuje? Uhádnete? Vyskúšajme to a uvidíme! +Čo sa stane, ak si od Pythonu vypýtame hodnotu kľúča, ktorý neexistuje? Uhádneš? Vyskúšame a uvidíme! -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} ```python >>> ucastnicka['vek'] @@ -408,33 +396,33 @@ Traceback (most recent call last): KeyError: 'vek' ``` -Aha, ďalšia chyba! Táto sa volá **KeyError** (chyba kľúča). Python je nápomocný a povie vám, že kľúč `'vek'` v tomto slovníku neexistuje. +Aha, ďalšia chyba! Táto sa volá **KeyError**. Python je nápomocný a povie ti, že kľúč (key) `'vek'` v tomto slovníku neexistuje. -Kedy by používať slovník alebo zoznam? No, to je dobrá otázka. Porozmýšľaj predtým, ako si pozrieš odpoveď v nasledujúcom riadku. +Kedy je dobré použiť slovník a kedy zoznam? No, to je dobrá otázka. Porozmýšľaj predtým, ako si pozrieš odpoveď v nasledujúcom riadku. -- Potrebuješ zoradenú postupnosť položiek? Vyber si zoznam (list). -- Potrebuješ priraďovať hodnoty kľúčovým slovám, aby si si ich mohla efektívne (podľa kľúča) neskôr vyhľadať? Použi slovník (dictionary). +- Potrebuješ zoradenú postupnosť vecí? Vyber si zoznam. +- Potrebuješ priraďovať hodnoty kľúčom, aby si ich mohla efektívne (podľa kľúča) neskôr vyhľadať? Použi slovník. -Slovníky, rovnako ako zoznamy sú *premenlivé*, čo znamená, že ich môžeme zmeniť po ich vytvorení. Po vytvorení môžeš do slovníka pridať nové dvojice kľúč/hodnota takto: +Tak ako pri zoznamoch, aj pri slovníkoch funkcia `len()` vracia počet párov kľúč-hodnota v danom slovníku. Poď, zadaj tento príkaz: {% filename %}command-line{% endfilename %} ```python ->>> ucastnicka['oblubeny_jazyk'] = 'Python' +>>> len(ucastnicka) +3 ``` -Tak ako pri zoznamoch, použitím metódy `len()` na slovníkoch dostaneš počet párov kľúč-hodnota v slovníku. Poďme na to, zadaj tento príkaz: +Slovníky, podobne ako zoznamy, sú *mutable* (premenlivé), čo znamená, že ich možno zmeniť po tom, ako boli vytvorené. Do existujúceho slovníka môžeš pridať nový pár kľúč-hodnota takto: {% filename %}command-line{% endfilename %} ```python ->>> len(ucastnicka) -4 +>>> ucastnicka['oblubeny_jazyk'] = 'Python' ``` -Dúfam, že to dáva zmysel. :) Pripravená na trochu zábavy so slovníkmi? Tak šup na ďalší riadok za úžasnými vecami. +Dúfam, že to dáva zmysel. :) Pripravená na trochu zábavy so slovníkmi? Čakajú nás ďalšie úžasné veci. -Na odstránenie položky zo slovníka môžeš použiť metódu `pop()`. Napríklad ak chceš odstrániť položku zodpovedajúcu kľúču `'oblubene_cisla'`, zadaj nasledujúci príkaz: +Na odstránenie položky zo slovníka môžeš tiež použiť metódu `pop()`. Napríklad, ak chceš odstrániť položku zodpovedajúcu kľúču `'oblubene_cisla'`, zadaj nasledujúci príkaz: {% filename %}command-line{% endfilename %} @@ -442,10 +430,10 @@ Na odstránenie položky zo slovníka môžeš použiť metódu `pop()`. Naprík >>> ucastnicka.pop('oblubene_cisla') [7, 42, 92] >>> ucastnicka -{'meno': 'Ola', 'krajina': 'Slovensko', 'oblubeny_jazyk': 'Python'} +{'meno': 'Ola', 'krajina': 'Polsko', 'oblubeny_jazyk': 'Python'} ``` -Ako vidíš z výstupu, pár kľúč-hodnota zodpovedajúci kľúču 'oblubene_cisla' bol vymazaný. +Ako vidíš z výstupu, pár kľúč-hodnota zodpovedajúci kľúču 'oblubene_cisla' zmizol. Taktiež môžeš zmeniť hodnotu priradenú k už vytvorenému kľúču v slovníku. Napíš: @@ -457,24 +445,24 @@ Taktiež môžeš zmeniť hodnotu priradenú k už vytvorenému kľúču v slovn {'krajina': 'Nemecko', 'oblubeny_jazyk': 'Python', 'meno': 'Ola'} ``` -Ako vidíš, hodnota kľúča `"krajina"` sa zmenila z `"Poľsko"` na `"Nemecko"`. :) Vzrušujúce? Hurá! Práve si sa naučila ďalšiu úžasnú vec. +Ako vidíš, hodnota kľúča `"krajina"` sa zmenila z `"Polsko"` na `"Nemecko"`. :) Vzrušujúce? Hurá! Práve si sa naučila ďalšiu úžasnú vec. ### Zhrnutie Skvelé! Teraz už vieš o programovaní dosť veľa. Pozrime sa, čo sme si vysvetlili v poslednej časti: -- **chyby** (angl. error) - teraz už vieš ako čítať a rozumieť chybám, ktoré sa zobrazia, ak Python nerozumie príkazu, ktorý mu zadáš +- **chyby** - teraz už vieš, ako čítať a rozumieť chybám, ktoré sa zobrazia, ak Python nerozumie príkazu, ktorý mu zadáš - **premenné** - názvy objektov, ktoré ti uľahčujú písanie kódu a robia tiež kód zrozumiteľnejším -- **zoznamy** (angl. list) - zoznam objektov uložených v určitom poradí -- **slovníky** (angl. dictionary) - objekty uložené v pároch kľúč-hodnota +- **zoznamy** - zoznamy objektov uložených v určitom poradí +- **slovníky** - objekty uložené v pároch kľúč-hodnota Tešíš sa na ďalšiu časť? :) ## Porovnávanie vecí -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: Comparisons](https://www.youtube.com/watch?v=7bzxqIKYgf4) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: Comparisons](https://www.youtube.com/watch?v=7bzxqIKYgf4). -Veľkú časť programovania predstavuje porovnávanie veci. Čo je najjednoduchšia vec na porovnanie? Čísla, samozrejme. Pozrime sa, ako to funguje: +Veľkú časť programovania predstavuje porovnávanie veci. Čo sa porovnáva najjednoduchšie? Čísla! Pozrime sa, ako to funguje: {% filename %}command-line{% endfilename %} @@ -489,13 +477,15 @@ True True >>> 5 != 2 True +>>> len([1, 2, 3]) > len([4, 5]) +True ``` -Dali sme Pythonu pár čísiel na porovnanie. Ako vidíš, Python vie porovnávať nielen čísla, ale vie porovnávať aj výsledky metód. Pekné, nie? +Dali sme Pythonu na porovnanie zopár čísel. Ako vidíš, Python vie porovnávať nielen čísla, ale aj výsledky matematických výrazov ako `2 * 2` a výsledky funkcií ako `2`, ktorú vrátila funkcia `len([4, 5])`. Fajn, nie? -Zaujíma ťa, prečo sme použili dve "rovná sa" `==` vedľa seba, aby sme porovnali, či sú čísla rovnaké? Jeden znak `=` používame na priraďovanie hodnôt premenným. Takže, ak chceš skontrolovať, či sú veci rovnaké, musíš vždy, úplne **vždy** použiť dve `==`. Taktiež môžeme zisťovať, či sa veci navzájom líšia. Na to použijeme symbol `!=`, ako bolo uvedené v príklade vyššie. +Zaujíma ťa, prečo sme použili dve znamenienka rovnosti `==` vedľa seba, aby sme porovnali, či sú čísla rovnaké? Jeden znak `=` používame na priraďovanie hodnôt premenným. Takže ak chceš skontrolovať, či sú veci rovnaké, musíš vždy, úplne **vždy** použiť dve `==`. Taktiež môžeme vyjadriť, že sa veci navzájom líšia. Na to použijeme symbol `!=`, ako bolo uvedené v príklade vyššie. -Zadaj Pythonu ešte dve úlohy: +Dajme Pythonu dve ďalšie úlohy: {% filename %}command-line{% endfilename %} @@ -506,14 +496,14 @@ True False ``` -`>` a `<` sme už videli, ale čo znamenajú `>=` a `<=`? Prečítať ich môžeš takto: +`>` a `<` sme už videli, ale čo znamenajú `>=` a `<=`? Môžeš ich čítať takto: - x `>` y znamená: x je väčšie ako y - x `<` y znamená: x je menšie ako y -- x `<=` y znamená: x je menšie alebo sa rovná y -- x `> =` y znamená: x je väčšie alebo sa rovná y +- x `<=` y znamená: x je menšie alebo rovné y +- x `> =` y znamená: x je väčšie alebo rovné y -Skvelé! Chceš vyskúšať ešte jeden? Skús toto: +Skvelé! Ešte si dáme jeden príklad? Skús toto: {% filename %}command-line{% endfilename %} @@ -526,14 +516,14 @@ False True ``` -Môžeš dať Pythonu toľko čísel, koľko chceš a on ti dá vždy odpoveď! Vcelku šikovné, nie? +Môžeš dať Pythonu toľko čísel, koľko chceš, a on ti dá vždy odpoveď! Vcelku šikovné, nie? - **and** - ak použiješ operátor `and`, obidve porovnávané veci musia byť pravdivé (True), aby príkaz bol pravdivý (True) -- **or** - ak použiješ operátor `or`, stačí aby jedna z porovnávaných vecí bola pravdivá, aby bol celý príkaz pravda (True) +- **or** - ak použiješ operátor `or`, stačí, aby jedna z porovnávaných vecí bola pravdivá, aby bol celý príkaz pravda (True) -Už ste počula výraz "porovnávať hrušky s jablkami"? Skúsme pythonský ekvivalent: +Už si počula výraz "porovnávať hrušky s jablkami"? Skúsme ekvivalent v Pythone: -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} ```python >>> 1 > 'django' @@ -542,20 +532,20 @@ Traceback (most recent call last): TypeError: '>' not supported between instances of 'int' and 'str' ``` -Tu vidíš, že tak ako nevieme porovnávať hrušky s jablkami, ani Python neviem porovnať číslo (`int`) s reťazcom (`str`). Namiesto toho vypíše chybu **TypeError** a povie nám, ktoré dva typy sa nedajú porovnať. +Tu vidíš, že tak, ako nevieme porovnávať hrušky s jablkami, ani Python nevie porovnať číslo (`int`) s reťazcom (`str`). Namiesto toho vypíše chybu **TypeError** a povie nám, že tieto dva typy sa nedajú porovnať. -## Logické hodnoty (Boolean) +## Logické hodnoty -Mimochodom práve si sa naučila nový typ objektu v Pythone. Volá sa **Boolean**. +Mimochodom, práve si sa naučila nový typ objektu v Pythone. Volá sa **boolean** (logická hodnota). -Existujú iba dva typy Booleovských objektov:- True (Pravda)- False (Nepravda): +Existujú iba dva typy boolean objektov: -- True -- False +- True (pravda) +- False (nepravda) -Aby ich Python spoznal, musíš vždy napísať 'True' (s veľkým písmenom na začiatku a zvyšok malým písmom). **true, TRUE, tRUE nebudú fungovať -- iba True je správne.** (Samozrejme, to isté platí aj pre 'False'.) +Aby ich Python spoznal, musíš vždy napísať "True" (s veľkým písmenom na začiatku a zvyšok malým písmom). **true, TRUE, tRUE nebudú fungovať -- iba True je správne.** (To isté platí aj pre 'False'.) -Logické hodnoty môžu byť aj premenné. Aha: +Premenné môžu tiež obsahovať booleany. Aha: {% filename %}command-line{% endfilename %} @@ -575,27 +565,27 @@ Môžeš to urobiť aj takto: False ``` -Precvič si to a zabav sa s logickými premennými - skús spustiť tieto príkazy: +Precvič si to a zabav sa s booleanmi - skús spustiť tieto príkazy: - `True and True` - `False and True` - `True or 1 == 1` - `1 != 2` -Gratulujeme! Logické hodnoty patria k tomu najužitočnejšiemu z programovania a ty si sa práve naučila, ako sa používajú! +Gratulujeme! Booleany patria k tomu najzaujímavejšiemu v programovaní a ty si sa práve naučila, ako sa používajú! # Ulož to! -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: Saving files and "If" statement](https://www.youtube.com/watch?v=dOAg6QVAxyk) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: Saving files and "If" statement](https://www.youtube.com/watch?v=dOAg6QVAxyk). -Zatiaľ sme písali všetok pythonský kód do konzoly interpretera, čiže môžeme na jedenkrát zadať iba jeden riadok kódu. Normálne programy sú uložené v súboroch, ktoré spúšťa buď **interpreter** alebo **kompilátor**. Doteraz sme spúšťali naše programy riadok po riadku v **interpreteri** Pythonu. Na ďalšie úlohy budeme potrebovať viac ako jeden riadok kódu, takže teraz rýchlo musíme: +Zatiaľ sme písali všetok kód v Pythone do konzoly interpretera, kde môžeme naraz zadať iba jeden riadok kódu. Bežné programy bývajú uložené v súboroch, ktoré spúšťa náš programovací jazyk buď pomocou **interpretera**, alebo **kompilátora**. Doteraz sme spúšťali naše programy riadok po riadku v **interpreteri** Pythonu. Na ďalšie úlohy budeme potrebovať viac ako jeden riadok kódu, takže teraz rýchlo musíme: - Ukončiť interpreter Pythonu -- Otvoriť si zvolený editor kódu -- Uložiť v ňom nejaký kód do nového pythonského súboru +- Otvoriť si náš zvolený editor kódu +- Uložiť v ňom trochu kódu do nového Python súboru - Spustiť ho! -Pre opustenie interpretera Pythonu, ktorý sme doteraz používali, zadaj jednoducho funkciu `exit()` +Ak chceš odísť z Python interpretera, ktorý sme doteraz používali, zadaj funkciu `exit()` {% filename %}command-line{% endfilename %} @@ -606,21 +596,21 @@ $ Tak sa dostaneš späť na príkazový riadok. -Už skôr si si vybrala editor kódu v kapitole [editor kódu](../code_editor/README.md). Teraz ho potrebujeme otvoriť a napísať v ňom do nového súboru nejaký kód: +V jednej z [predošlých častí](../code_editor/README.md) sme si vybrali editor kódu. Teraz budeme chcieť tento editor otvoriť a napísať pár riadkov kódu do nového súboru (alebo ak používaš Chromebook, vytvoriť nový súbor v Cloud IDE a otvoriť ho, čo sa udeje v zabudovanom editore kódu): {% filename %}editor{% endfilename %} ```python -print('Hello, Django girls!') +print('Ahoj, Django Girls!') ``` -Samozrejme, teraz si už vcelku skúsená Python developerka, takže kľudne napíš nejaký kód, ktorý si sa dnes naučila. +Prirodzene, teraz si už poriadne skúsená Python vývojárka, takže pokojne napíš nejaký kód, ktorý si sa dnes naučila. -Teraz uložíme súbor a dáme mu nejaký zrozumiteľný názov. Nazvime ho **python_intro.py** a ulož ho plochu. Tento súbor môžeš nazvať akokoľvek chceš, ale dôležité je, aby jeho názov končil **.py**. Prípona **.py** nášmu operačnému systému hovorí, že je to **súbor spustiteľný Pythonom** a môže ho spustiť Pythonom. +Teraz súbor musíme uložiť a dať mu nejaký zrozumiteľný názov. Nazvime ho **python_intro.py** a uložme ho na plochu. Súbor môžeš nazvať, akokoľvek chceš, ale dôležité je, aby jeho názov končil na **.py**. Prípona **.py** nášmu operačnému systému hovorí, že je to **spustiteľný pythonovský súbor** a Python ho vie spustiť. -> **Poznámka** Všimni si jednu z najúžasnejších vecí editorov kódu: farby! V pythonskej konzole bolo všetko napísané jednou farbou, teraz však vidíš, že funkcia `print` je napísaná inou farbou ako reťazec. Toto sa nazýva "zvýraznenie syntaxe" a pri programovaní je to fakt užitočná vec. Farba výrazov ti môže pomôcť, ak máš neuzavretý reťazec či preklep v názve špeciálnych slov (ako napríklad `def` vo funkcii, ktorú uvidíme neskôr). Toto je jedným z dôvodov, prečo používame editor kódu. :) +> **Poznámka** Všimni si jednu z najlepších vecí na editoroch kódu: farby! V Python konzole bolo všetko jednou farbou, teraz by si ale mala vidieť, že funkcia `print` je napísaná inou farbou ako reťazec. Toto sa nazýva "zvýraznenie syntaxe" (syntax highlighting) a pri programovaní je to fakt užitočná vec. Farba výrazov ti môže niečo napovedať, ak máš niekde neuzavretý reťazec či preklep v názve špeciálnych slov (ako napríklad `def` vo funkcii, ktorú uvidíme neskôr). Toto je jeden z dôvodov, prečo používame editor kódu. :) -Súbor máme uložený, je čas ho spustiť! Pomocou poznatkov z kapitoly o príkazovom riadku, pomocou Terminálu **zmeň adresár** na plochu. +Súbor máme uložený, je čas ho spustiť! Pomocou poznatkov z kapitoly o príkazovom riadku **zmeň adresár** na plochu terminálovým príkazom. @@ -630,55 +620,57 @@ Na Macu bude príkaz vyzerať takto: {% filename %}command-line{% endfilename %} $ cd ~/Desktop - + -Na Linuxe to bude takto (slovo "Desktop" bude možno preložené): +Na Linuxe bude takýto: {% filename %}command-line{% endfilename %} $ cd ~/Desktop + +(Pripomíname, že slovo "Desktop" alebo "Plocha" môže bude preložené.) -Vo Windowse v Command Prompt, to bude takto: +Vo windowsovom Command Prompte to bude takto: {% filename %}command-line{% endfilename %} > cd %HomePath%\Desktop - + -A vo Windows Powershell bude príkaz vyzerať takto: +A vo windowsovom PowerShelli to bude takto: {% filename %}command-line{% endfilename %} > cd $Home\Desktop - + -Ak máš akékoľvek ťažkosti, stačí požiadať o pomoc. +Ak sa zasekneš, neboj sa spýtať. Na to presne tu máš mentorky a mentorov! Teraz použi Python na spustenie kódu v súbore: {% filename %}command-line{% endfilename %} $ python3 python_intro.py - Hello, Django girls! - + Ahoj, Django Girls! + -Poznámka na Windowse python3 príkaz neexistuje. Použi python na spustenie súboru: +Poznámka: na Windowse "python3" ako príkaz neexistuje. Na spustenie súboru použi "python": {% filename %}command-line{% endfilename %} @@ -686,13 +678,13 @@ Poznámka na Windowse python3 príkaz neexistuje. Použi python na spustenie sú > python python_intro.py ``` -Výborne! Práve si spustila svoj prvý pythonský program uložený v súbore. Skvelý pocit, však? +Okej! Práve si spustila svoj prvý program v Pythone zo súboru. Skvelý pocit, nie? -Teraz sa môžeš posunúť na ďalší základný nástroj v programovaní: +Teraz sa môžeš posunúť na základný nástroj v programovaní: ## If … elif … else -Kopec vecí v kóde sa má spúšťať len ak sú splnené nejaké podmienky. Práve na to používa Python príkaz **if**. +Kopec vecí v kóde sa má spúšťať, len ak sú splnené určité podmienky. Práve na to používa Python príkaz **if**. Nahraď kód v súbore **python_intro.py** týmto: @@ -704,26 +696,26 @@ if 3 > 2: Ak to uložíš a spustíš, dostaneš túto chybu: -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} $ python3 python_intro.py File "python_intro.py", line 2 ^ SyntaxError: unexpected EOF while parsing + - -Python očakáva, že od nás dostane ďalšie inštrukcie, ktoré majú byť vykonané ak je podmienka `3 > 2` pravdivá (teda ak bude mať hodnotu `True`). Skúsme zariadiť, aby Python napísal "Funguje to!". Zmeň svoj kód v súbore **python_intro.py** takto: +Python očakáva, že od nás dostane ďalšie inštrukcie, ktoré má vykonať, ak je podmienka `3 > 2` pravdivá (teda ak bude mať hodnotu `True`). Skúsme Pythonu povedať, aby vypísal "Funguje to!". Zmeň svoj kód v súbore **python_intro.py** takto: {% filename %}python_intro.py{% endfilename %} ```python if 3 > 2: - print('It works!') + print('Funguje to!') ``` -Všimla si si, ako sme odsadili druhý riadok o 4 medzery? To musíme urobiť preto, aby Python vedel, ktorú časť kódu má spustiť ak je výsledok pravdivý. Môžeš použiť len jednu medzeru, ale takmer všetci programátori v Pythone používajú 4 medzery, aby bol kód dobre čitateľný. Jeden `tab` sa tiež počíta ako 4 medzery. +Všimla si si, ako sme odsadili druhý riadok o 4 medzery? To musíme urobiť preto, aby Python vedel, ktorú časť kódu má spustiť, ak je výsledok pravdivý. Môžeš použiť len jednu medzeru, ale takmer všetci programátori a programátorky v Pythone používajú 4 medzery, aby bol kód dobre čitateľný. Jedno stlačenie klávesy Tab sa tiež bude rátať ako 4 medzery, pokiaľ je tvoj editor tak nastavený. Keď sa pre jedno rozhodneš, zostaň pri tom! Ak si už začala odsádzať 4 medzerami, daj si záležať, aby aj ďalšie odsadenia boli 4 medzerami, inak ti to môže spôsobovať problémy. -Ulož to a spusti to znova: +Ulož to a spusti znova: {% filename %}command-line{% endfilename %} @@ -732,19 +724,19 @@ $ python3 python_intro.py Funguje to! ``` -Poznámka: Zapamätaj si že Windows nepozná príkaz "python3". Od teraz a naďalej, nahraď "python3" príkazom "python"pri spúšťaní súborov. +Poznámka: Pamätaj, že Windows nepozná príkaz "python3". Odteraz vždy pri spúšťaní súborov nahraď "python3" príkazom "python". ### Čo ak podmienka nie je pravdivá? -V predchádzajúcich príkladoch, bol kód vykonaný len vtedy, keď podmienky boli pravdivé. Ale Python má tiež príkazy `elif` a `else`: +V predcházajúcich príkladoch sa náš kód vykonal, len keď podmienka bola pravdivá (True). Ale Python má aj príkazy `elif` a `else`: {% filename %}python_intro.py{% endfilename %} ```python if 5 > 2: - print('5 is indeed greater than 2') + print('5 je naozaj viac ako 2') else: - print('5 is not greater than 2') + print('5 nie je viac ako 2') ``` Keď to spustíš, vypíše to: @@ -753,20 +745,20 @@ Keď to spustíš, vypíše to: $ python3 python_intro.py 5 je naozaj viac ako 2 + - -Ak by 2 bolo väčšie ako 5, spustil by sa druhý príkaz. Jednoduché, nie? Pozrime sa, ako funguje `elif`: +Ak by 2 bolo viac ako 5, spustil by sa druhý príkaz. Pozrime sa, ako funguje `elif`: {% filename %}python_intro.py{% endfilename %} ```python -name = 'Sonja' -if name == 'Ola': - print('Ahoj Ola!') -elif name == 'Sonja': - print('Ahoj Sonja!') +meno = 'Sona' +if meno == 'Ola': + print('Cau Ola!') +elif meno == 'Sona': + print('Cau Sona!') else: - print('Ahoj neznama!') + print('Cau neznama!') ``` a po spustení: @@ -774,111 +766,111 @@ a po spustení: {% filename %}command-line{% endfilename %} $ python3 python_intro.py - Ahoj Sonja! + Cau Sona! + +Všimla si si, čo sa stalo? `elif` ti dovolí pridať dodatočné podmienky, ktoré sa spustia, ak predchádzajúce podmienky nie sú splnené. -Všimla si si, čo sa stalo? `elif` ti dovolí pridať dodatočné podmienky, ktoré sa spustia, ak sú predchádzajúce nesplnené. - -Za prvý `if` môžeš dať `elif` toľkokrát, koľko len chceš. Napríklad: +Za prvý `if` môžeš dať `elifov` toľko, koľko len chceš. Napríklad: {% filename %}python_intro.py{% endfilename %} ```python -volume = 57 -if volume < 20: - print("It's kinda quiet.") +hlasitost = 57 +if hlasitost < 20: + print("Je to pomerne tiche.") elif 20 <= volume < 40: - print("It's nice for background music") + print("Je to fajn ako hudba na pozadi") elif 40 <= volume < 60: - print("Perfect, I can hear all the details") + print("Super, pocujem vsetky detaily") elif 60 <= volume < 80: - print("Nice for parties") + print("Fajn na party") elif 80 <= volume < 100: - print("A bit loud!") + print("Trochu hlasne!") else: - print("My ears are hurting! :(") + print("Bolia ma usi! :(") ``` -Python prejde všetkými podmienkami v poradí a vypíše: +Python prejde všetkými podmienkami poporade a vypíše: {% filename %}command-line{% endfilename %} $ python3 python_intro.py Super, pocujem vsetky detaily - + ## Komentáre -Komentáre su riadky, ktoré sa začínajú s `#`. Po `#` môžeš napísať hocičo, Python to bude ignorovať. Komentáre urobia tvoj kód čitateľnejším pre iných ludí. +Komentáre (comments) sú riadky, ktoré sa začínajú znakom `#`. Po `#` môžeš napísať hocičo, Python to bude ignorovať. Komentáre môžu spraviť tvoj kód čitateľnejším pre iných ludí. -Pozrime sa ako to vyzerá: +Pozrime sa, ako to vyzerá: {% filename %}python_intro.py{% endfilename %} ```python -# Change the volume if it's too loud or too quiet -if volume < 20 or volume > 80: - volume = 50 - print("That's better!") +# Zmen hlasitost, ak je prilis silna alebo slaba +if hlasitost < 20 or hlasitost > 80: + hlasitost = 50 + print("Lepsie!") ``` -Nemusíš písať komentár pre každý riadok kódu čo napíšeš, ale je užitočné vysvetliť prečo tvoj kód niečo robǐ, alebo stručne popísať keď robí niečo zložité. +Nemusíš písať komentár pre každý riadok kódu, čo napíšeš, ale je užitočné vysvetliť, prečo tvoj kód niečo robǐ, alebo stručne zhrnúť, čo sa deje, keď robí niečo zložité. ### Zhrnutie -V posledných troch cvičeniach si sa naučila: +V posledných pár cvičeniach si sa naučila: - **porovnávať veci** - v Pythone môžeš porovnávať veci pomocou znamienok `>`, `>=`, `==`, `<=`, `<` a operátorov `and`, `or` -- **Booleovské/logické premenné** - typ objektu, ktorý môže mať len jednu z dvoch hodnôt: `True` (pravda) alebo `False` (nepravda) -- **Ukladať súbory** - ukladanie kódu v súboroch, takže môžete spúšťať väčšie programy. +- **boolean** - typ objektu, ktorý môže mať len jednu z dvoch hodnôt: `True` (pravda) alebo `False` (nepravda) +- **ukladať súbory** - ukladanie kódu v súboroch, vďaka čomu môžeme spúšťať väčšie programy - **if... elif... else** - príkazy, ktoré ti umožňujú spustiť kód, iba ak sú splnené určité podmienky. -- **comments** - lines that Python won't run which let you document your code +- **komentáre** - riadky, ktoré Python nebude spúšťať, vďaka ktorým môžeš svoj kód zdokumentovať -Teraz je čas na poslednú časť tejto kapitoly! +Prišiel čas na poslednú časť tejto kapitoly! ## Tvoje vlastné funkcie! -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: Functions](https://www.youtube.com/watch?v=5owr-6suOl0) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: Functions](https://www.youtube.com/watch?v=5owr-6suOl0). -Pamätáš si funkcie ako napríklad `len()`, ktoré môžeš v Pythone spúšťať? Máme pre teba dobrú správu - teraz sa naučíš ako napísať vlastnú funkciu! +Pamätáš si funkcie ako napríklad `len()`, ktoré môžeš v Pythone spúšťať? Máme pre teba dobrú správu - teraz sa naučíš, ako napísať vlastnú funkciu! -Funkcia je postupnosť inštrukcií, ktoré by mal Python spustiť. Každá funkcia v Pythone začína kľúčovým slovom `def`, má svoje meno a môže mať nejaké parametre. Skusme to. Nahraď kód v **python_intro.py** týmto: +Funkcia je postupnosť inštrukcií, ktoré by mal Python spustiť. Každá funkcia v Pythone začína kľúčovým slovom `def`, má svoje meno a môže mať nejaké parametre. Vyskúšajme si to. Nahraď kód v **python_intro.py** týmto: {% filename %}python_intro.py{% endfilename %} ```python -def hi(): +def ahoj(): print('Ahoj!') print('Ako sa mas?') -hi() +ahoj() ``` -OK, naša prvá funkcia je pripravená! +OK, naša prvá funkcia je hotová! -Možno sa čuduješ prečo sme na koniec súboru napísali názov funkcie. To preto, lebo Python číta súbor a vykonáva kód od vrchu po spodok. Takže aby sme mohli našu funkciu použiť, musíme jej názov napísať opäť. +Možno sa čuduješ, prečo sme na koniec súboru napísali názov funkcie. Keď sme napísali `def ahoj():` a za tým odsadené riadky, písali sme inštrukcie, čo má funkcia `ahoj()` robiť. Python tieto inštrukcie prečíta a zapamätá si ich, ale funkciu zatiaľ nespustí. Aby sme Pythonu povedali, že funkciu má spustiť, musíme ju zavolať (call) pomocou `ahoj()`. Python číta a spúšťa obsah nášho súboru zhora nadol, takže funkciu musíme najprv definovať a až potom zavolať. -Spusťme to a pozrime sa, čo sa stane: +Poďme to spustiť a pozrime sa, čo sa stane: {% filename %}command-line{% endfilename %} $ python3 python_intro.py Ahoj! Ako sa mas? + +Poznámka: Ak to nefunguje, žiadne strachy! Výstup ti pomôže zistiť prečo: -Poznámka: Ak nefunguje, nepanikár! Výstup ti pomôže zistiť dôvod, prečo: +- Ak sa ti zjaví `NameError`, znamená to, že si niečo chybne napísala, takže by si si mala overiť, že si použila rovnaký názov, keď si funkciu vytvárala pomocou `def ahoj()` a keď si ju zavolala pomocou `ahoj()`. +- Ak sa ti zjaví `IndentationError`, uisti sa, že oba `print` riadky majú rovnaký počet medzier od začiatku riadku: Python vyžaduje, aby všetky riadky boli pedantne zarovnané. +- Ak nevidíš žiaden výstup, tak sa pozri, či posledné `ahoj()` *nie je* odsadené - ak je, tento riadok sa stal súčasťou funkcie a nikdy sa nespustí. -- Ak sa ti zjaví `NameError`, to znamená, že si niečo chybne napísala, takže by si mala overiť, že si použila rovnaké meno, keď si vytvárala pomocou `def hi()` a keď si ju zavolala pomocou `hi()`. -- Ak sa ti zjaví `IndentationError`, uisti sa, že oba `print` riadky, majú rovnaký počet medzier od začiatku riadku: python vyžaduje aby všetky riadky boli pedatne zarovnané. -- Ak nevidíš žiaden výstup, tak sa pozri či posledné `hi()` *nie je* odsadené - ak je, ten riadok sa stal súčasťou funkcie a nikdy nedojde k jeho spusteniu. - -Poďme vytvoriť našu prvú funkciu s parametrami. Použijeme predchádzajúci príklad - funkcia, ktorá hovorí "ahoj" osobe, ktorá ju spustí - s menom: +Poďme vytvoriť našu prvú funkciu s parametrami. Použijeme predchádzajúci príklad - funkciu, ktorá hovorí "ahoj" osobe, ktorá ju spustí - s menom: {% filename %}python_intro.py{% endfilename %} ```python -def hi(name): +def ahoj(meno): ``` Ako vidíš, dali sme našej funkcii parameter, ktorý sme nazvali `meno`: @@ -886,50 +878,50 @@ Ako vidíš, dali sme našej funkcii parameter, ktorý sme nazvali `meno`: {% filename %}python_intro.py{% endfilename %} ```python -def hi(meno): +def ahoj(meno): if meno == 'Ola': print('Ahoj Ola!') - elif meno == 'Sonja': - print('Ahoj Sonja!') + elif meno == 'Sona': + print('Ahoj Sona!') else: print('Ahoj neznama!') -hi() +ahoj() ``` -Zapamätaj si: Funkcia `print` je odsadená o 4 medzery vo vnútri príkazu `if`. Je to preto, lebo funkcia sa spustí, len ak je splnená podmienka. Pozrime sa ako to funguje: +Pamätaj: Funkcia `print` je odsadená o 4 medzery vo vnútri príkazu `if`. Je to preto, lebo funkcia sa spustí, len ak je splnená podmienka. Pozrime sa, ako to funguje: -{% filename %}command-line{% endfilename %} +{% filename %}{{ warning_icon }} command-line{% endfilename %} $ python3 python_intro.py Traceback (most recent call last): File "python_intro.py", line 10, in - hi() - TypeError: hi() missing 1 required positional argument: 'meno' - + ahoj() + TypeError: ahoj() missing 1 required positional argument: 'meno' + -Ups, chyba. Našťastie Python nám dáva vcelku užitočnú chybovú hlášku. Hovorí nám, že funkcia `hi()` (tá, čo sme definovali) má jeden povinný argument (s názvom `meno`) a že sme mu ju zabudli zadať pri volaní funkcie. Opravme to na konci súboru: +Ups, chyba. Našťastie, Python nám dáva veľmi užitočnú chybovú hlášku. Hovorí nám, že funkcia `ahoj()` (tá, čo sme definovali) má jeden povinný argument (s názvom `meno`) a že sme mu ju zabudli zadať pri volaní funkcie. Opravme to na konci súboru: {% filename %}python_intro.py{% endfilename %} ```python -hi("Ola") +ahoj("Ola") ``` -A znova ho spusti: +A znova ho spustime: {% filename %}command-line{% endfilename %} $ python3 python_intro.py Ahoj Ola! - + A čo ak zmeníme meno? {% filename %}python_intro.py{% endfilename %} ```python -hi("Sonja") +ahoj("Sona") ``` A spustíme to: @@ -937,56 +929,56 @@ A spustíme to: {% filename %}command-line{% endfilename %} $ python3 python_intro.py - Ahoj Sonja! - + Ahoj Sona! + -No a čo si myslíš, čo sa stane, ak tam napíšeš iné meno? (Nie Ola ani Sonja). Vyskúšaj a uvidíš, či bol tvoj predpoklad správny. Malo by ti vypísať toto: +No a čo si myslíš, čo sa stane, ak tam napíšeš iné meno? (Nie Ola, ani Sona.) Vyskúšaj a uvidíš, či bol tvoj predpoklad správny. Malo by ti to vypísať toto: {% filename %}command-line{% endfilename %} - Ahoj neznáma! + Ahoj neznama! + +Nie je to super? Vďaka tomu nemusíš písať dookola to isté zakaždým, keď chceš zmeniť meno človeka, ktorého má funkcia pozdraviť. A to je presne dôvod, prečo potrebujeme funkcie - aby sme sa nemuseli v kóde opakovať! -Úžasné, nie? Vďaka tomu nemusíš prepisovať dokola to isté zakaždým, keď chceš zmeniť meno osoby, ktorú má funkcia pozdraviť. A to je presne dôvod, prečo potrebujeme funkcie - aby sme nemuseli opakovať svoj kód! - -Urobme to teda trochu rozumnejšie - existujú viac ako dve mená a písať podmienku pre každé by bolo trochu náročné, však? +Skúsme to trochu inak. Existuje viac mien ako len dve a písať samostatnú podmienku pre každé jedno by bolo ťažké, nie? Nahraď obsah svojho súboru týmto: {% filename %}python_intro.py{% endfilename %} ```python -def hi(meno): +def ahoj(meno): print('Ahoj ' + meno + '!') -hi("Katka") +ahoj("Kika") ``` -Teraz spusťme kód: +Teraz tento kód spustime: {% filename %}command-line{% endfilename %} $ python3 python_intro.py - Ahoj Katka! - + Ahoj Kika! + -Gratulujeme! Práve si sa naučila ako sa píšu funkcie! :) +Gratulujeme! Práve si sa naučila, ako sa píšu funkcie! :) ## Cykly -> Pre čitateľov doma: Táto kapitola je spracovaná v [Python Basics: For Loop](https://www.youtube.com/watch?v=aEA6Rc86HF0) videu. +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: For Loop](https://www.youtube.com/watch?v=aEA6Rc86HF0). Toto je už posledná časť. Išlo to rýchlo, však? :) -Programátori sa neradi opakujú. Programovanie je o automatizácii vecí, takže nechceme zdraviť každú osobu manuálne, nie? A vtedy nám prídu vhod cykly. +Programátori a programátorky sa neradi opakujú. Programovanie je o automatizácii vecí, takže nechceme zdraviť každú osobu manuálne, však? A tu nám prídu vhod cykly (loops). -Ešte si spomínaš na zoznamy? Pripravme zoznam dievčat: +Ešte si spomínaš na zoznamy? Spravme si zoznam dievčat: {% filename %}python_intro.py{% endfilename %} ```python -dievcata = ['Katka', 'Monika', 'Zuzka', 'Ola', 'Ty'] +dievcata = ['Katka', 'Kika', 'Zuza', 'Ola', 'Ty'] ``` -Chceme ich pozdraviť všetky menom. Na to máme funkciu `hi`, tak ju použime v cykle: +Chceme ich pozdraviť všetky menom. Na to máme funkciu `ahoj`, tak ju použime v cykle: {% filename %}python_intro.py{% endfilename %} @@ -996,17 +988,17 @@ for meno in dievcata: Príkaz `for` sa správa podobne ako `if`; kód pod oboma z nich musí byť odsadený o štyri medzery. -Tu je plný kód, ktorý napíšeme do súboru: +Tu je celý kód, ktorý napíšeme do súboru: {% filename %}python_intro.py{% endfilename %} ```python -def hi(meno): +def ahoj(meno): print('Ahoj ' + meno + '!') -dievcata = ['Katka', 'Monika', 'Zuzka', 'Ola', 'Ty'] +dievcata = ['Katka', 'Kika', 'Zuza', 'Ola', 'Ty'] for meno in dievcata: - hi(meno) + ahoj(meno) print('Dalsie dievca') ``` @@ -1017,17 +1009,17 @@ A keď to spustíme: $ python3 python_intro.py Ahoj Katka! Dalsie dievca - Ahoj Monika! + Ahoj Kika! Dalsie dievca - Ahoj Zuzka! + Ahoj Zuza! Dalsie dievca Ahoj Ola! Dalsie dievca Ahoj Ty! Dalsie dievca + - -Ako vidíš, všetko, čo dáš do príkazu `for` s oddsadením sa bude opakovať pre každý prvok zoznamu `dievcata`. +Ako vidíš, všetko, čo dáš do príkazu `for` s tým, že to odsadíš, sa zopakuje pre každý prvok zoznamu `dievcata`. `for` môžeš pomocou funkcie `range` použiť aj na čísla: @@ -1047,18 +1039,18 @@ for i in range(1, 6): 3 4 5 + +`range` je funkcia, ktorá vytvára zoznam s postupnosťou čísel (krajné čísla funkcii poskytneš ako parametre). -`range` je funkcia, ktorá vytvára zoznam čísel s postupnosťou čísel (krajné čísla funkcii poskytneš ako parametre). - -Všimni si, že druhé číslo sa nenachádza vo výstupnom zozname (teda `range(1, 6)` počíta od 1 po 5, ale neobsahuje číslo 6). To je preto, lebo "range" je jednostranne otvorený, čo znamená, že obsahuje prvú hodnotu, ale nie poslednú. +Všimni si, že druhé číslo sa nenachádza vo výstupnom zozname (teda `range(1, 6)` počíta od 1 po 5, ale neobsahuje číslo 6). To preto, lebo "range" je jednostranne otvorený, čo znamená, že obsahuje prvú hodnotu, ale nie poslednú. ## Zhrnutie -To je všetko. **Si úplne geniálna!** Toto bola náročná kapitola, takže by si mala byť na seba pyšná. My sme rozhodne hrdí na teba, že si to zvládla až potiaľto! +To je všetko. **Si úplne super!** Toto bola náročná kapitola, takže by si mala byť na seba pyšná. My sme na teba rozhodne hrdí, že si to zvládla až potiaľto! -Oficiálnu a plnú verziu tutoriálu najdeš na https://docs.python.org/3/tutorial/. Tam najdeš podrobnejšie a úplné informácie o jazyku. Nech sa darí :) +Oficiálnu verziu tutoriálu najdeš na https://docs.python.org/3/tutorial/. Prevedie ťa jazykom podrobnejšie. Nech sa darí! :) -Teraz na chvíľu si daj pauzu - natiahni sa trochu, poprechádzaj sa, nechaj svoje oči oddýchnuť si - a potom prejdeme na ďalšiu kapitolu. :) +Teraz na chvíľu si daj pauzu - natiahni sa trochu, poprechádzaj sa, nech si tvoje oči oddýchnu - a potom prejdeme na ďalšiu kapitolu. :) -![Koláčik](images/cupcake.png) +![Koláčik](images/cupcake.png) \ No newline at end of file diff --git a/sk/python_introduction/prompt.md b/sk/python_introduction/prompt.md new file mode 100644 index 00000000000..d92d1575a16 --- /dev/null +++ b/sk/python_introduction/prompt.md @@ -0,0 +1,17 @@ +## Pythonový príkazový riadok + +> Pre čitateľky a čitateľov doma: Táto kapitola je spracovaná vo videu [Python Basics: Integers, Strings, Lists, Variables and Errors](https://www.youtube.com/watch?v=MO63L4s-20U). + +Aby sme sa mohli začať hrať s Pythonom, musíme na svojom počítači otvoriť *príkazový riadok*. Už by si mala vedieť, ako sa to robí - naučili sme sa to v [Úvode do príkazového riadku](../intro_to_command_line/README.md). + +Keď si pripravená, pokračuj inštrukciami nižšie. + +Chceme otvoriť Python konzolu, takže napíš `python` na Windowse alebo `python3` na Mac OS a Linuxe a stlač `enter`. + +{% filename %}command-line{% endfilename %} +``` +$ python3 +Python {{ book.py_release }} (...) +Type "help", "copyright", "credits" or "license" for more information. +>>> +``` diff --git a/sk/template_extending/README.md b/sk/template_extending/README.md old mode 100755 new mode 100644 index af2c7471012..c0c7ae5d786 --- a/sk/template_extending/README.md +++ b/sk/template_extending/README.md @@ -1,14 +1,14 @@ # Rozširovanie šablón -Ďalšia super možnosť, ktorú ti Django ponúka je **rozširovanie šablón**. Znamená to, že môžeš použiť rovnaké časti HTML kódu na rôznych stránkach svojho webu. +Ďalšia super možnosť, ktorú ti Django ponúka, je **rozširovanie šablón** (template extending). Znamená to, že môžeš použiť rovnaké časti HTML kódu na rôznych stránkach svojho webu. -Šablóny ti pomôžu, keď chceš použiť rovnaké informácie alebo zobrazenie na viac ako jednom mieste. Nemusíš dokola opakovať to isté. A ak chceš niečo zmeniť, nemusíš to urobiť v každej šablóne, len v jednej! +Šablóny ti pomôžu, keď chceš použiť rovnaké informácie alebo formát obsahu na viac ako jednom mieste. Nemusíš dokola opakovať to isté. A ak chceš niečo zmeniť, nemusíš to urobiť v každej šablóne, len v jednej! ## Vytvorenie základnej šablóny -Základná šablóna je najzákladnejšia šablóna, ktorú rozširuješ na každej stránke svojej web stránky. +Základná šablóna (base template) je najzákladnejšia šablóna, ktorú rozširuješ na každej stránke svojej web stránky. -Vytvorme súbor `base.html` v `blog/templates/blog/`: +Vytvorme súbor `base.html` v priečinku `blog/templates/blog/`: blog └───templates @@ -17,40 +17,42 @@ Vytvorme súbor `base.html` v `blog/templates/blog/`: post_list.html -Otvor ho a skopíruj doň všetko z `post_list.html` do súboru `base.html`: +Otvor ho v editore a skopíruj všetko z `post_list.html` do `base.html` takto: {% filename %}blog/templates/blog/base.html{% endfilename %} ```html {% load static %} + Django Girls blog - - + - + -
+
-
+
{% for post in posts %} -
-
+
+
-

{{ post.title }}

+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %}
-
+
``` @@ -61,21 +63,23 @@ Potom v `base.html` nahraď celé `` (všetko medzi `` a ``) ```html - -
+ +
-
+
{% block content %} {% endblock %}
-
+
``` -{% raw %}Možno si si všimla, že toto nahradilo všetko od `{% for post in posts %}` po `{% endfor %}` s: {% endraw %} +{% raw %}Možno si si všimla, že toto nahradilo všetko od `{% for post in posts %}` po `{% endfor %}` týmto: {% endraw %} {% filename %}blog/templates/blog/base.html{% endfilename %} @@ -84,45 +88,45 @@ Potom v `base.html` nahraď celé `` (všetko medzi `` a ``) {% endblock %} ``` -Ale prečo? Práve si vytvorila `block`! Použila si šablónový tag `{% block %}` aby si vytvoila časť, do ktorej bude vložené HTML. To HTML bude pochádzať z inej šablóny, ktorá rozšíri túto šablónu (`base.html`). Hneď ti ukážeme, ako sa to robí. +Ale prečo? Práve si vytvorila `blok`! Použila si šablónový tag `{% block %}`, aby si vytvoila časť, do ktorej bude vložené HTML. To HTML bude pochádzať z inej šablóny, ktorá rozšíri túto šablónu (`base.html`). Hneď ti ukážeme, ako sa to robí. -Teraz ulož `base.html` a znova otvor `blog/templates/blog/post_list.html`. {% raw %}Odstrániš všetko nad `{% for post in posts %}` a pod `{% endfor %}`. Keď skončíš, súbor bude vyzerať nasledovne:{% endraw %} +Teraz ulož `base.html` a znova otvor `blog/templates/blog/post_list.html` v editore. {% raw %}Odstrániš všetko nad `{% for post in posts %}` a pod `{% endfor %}`. Keď skončíš, súbor bude vyzerať nasledovne:{% endraw %} {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html {% for post in posts %} -
-
+
+
-

{{ post.title }}

+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} ``` -Chceme toto použiť ako súčasť našej šablóny pre všetky bloky. Je čas pridať blokové tagy do tohto súboru! +Chceme toto použiť ako súčasť našej šablóny pre všetky bloky. Je načase pridať blokové tagy do tohto súboru! -{% raw %}Blokový tag by sa mal zhodovať s tagom v `base.html` súbore. Taktiež by mal obsahovať celý kód, čo patrí do tvojích obsahových blokov. Aby si to urobila, vlož všetko medzi `{% block content %}` a `{% endblock %}`. Takto:{% endraw %} +{% raw %}Blokový tag by sa mal zhodovať s tagom v `base.html` súbore. Taktiež by mal obsahovať celý kód, čo patrí do tvojich obsahových blokov. To docieliš tak, že vložíš všetko medzi `{% block content %}` a `{% endblock %}`. Takto:{% endraw %} {% filename %}blog/templates/blog/post_list.html{% endfilename %} ```html {% block content %} {% for post in posts %} -
-
+
+
-

{{ post.title }}

+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} {% endblock %} ``` -Ešte zostála len jediná vec. Potrebujeme prepojiť tieto dve šablóny. O tomto je rozširovanie šablón! Urobíme to pridaním extends tagu na začiatku súboru. Nasledovne: +Už zostáva len jediná vec. Potrebujeme tieto dve šablóny prepojiť. To je celá podstata rozširovania šablón! Urobíme to pridaním "extends" tagu na začiatku súboru. Nasledovne: {% filename %}blog/templates/blog/post_list.html{% endfilename %} @@ -131,17 +135,17 @@ Ešte zostála len jediná vec. Potrebujeme prepojiť tieto dve šablóny. O tom {% block content %} {% for post in posts %} -
-
+
+
-

{{ post.title }}

+ +

{{ post.title }}

{{ post.text|linebreaksbr }}

-
+ {% endfor %} {% endblock %} ``` -A je to! Skontroluj či tvoja web stránka funguje tak, ako má. :) +A je to! Súbor ulož a skontroluj, či tvoja web stránka stále funguje tak, ako má. :) -> Ak sa ti zobrazí chyba `TemplateDoesNotExist`, to znamená, že neexistuje `blog/base.html` súbor a `runserver` beží v konzole. Skús ho zastaviť (stlačením Ctrl+C – Control a C tlačidiel spolu) a spusti ho znova pomocou príkazu `python manage.py runserver`. \ No newline at end of file +> Ak sa ti zobrazí chyba `TemplateDoesNotExist`, znamená to, že neexistuje súbor `blog/base.html` a `runserver` beží v konzole. Skús ho zastaviť (stlačením Ctrl+C – tlačidiel Control a C spolu) a spustiť znova pomocou príkazu `python manage.py runserver`. \ No newline at end of file diff --git a/sk/whats_next/README.md b/sk/whats_next/README.md old mode 100755 new mode 100644 index f12b9b3499f..8f6a28cdb54 --- a/sk/whats_next/README.md +++ b/sk/whats_next/README.md @@ -1,25 +1,43 @@ # Čo ďalej? -Môžeš si zablahoželať! **Si úplne úžasná**. Sme hrdí! <3 +Môžeš si zablahoželať! **Si úplne úžasná**. Sme na teba hrdí! <3 ### Čo robiť teraz? Daj si pauzu a oddýchni si. Práve si urobila niečo ohromné. -Potom začni sledovať Django Girls na [Facebooku](http://facebook.com/djangogirls) alebo [Twitteri](https://twitter.com/djangogirls) a zostaň informovaná. +Potom určite začni sledovať Django Girls na [Facebooku](http://facebook.com/djangogirls) alebo [Twitteri](https://twitter.com/djangogirls) pre najnovšie informácie. ### Viete odporučiť ďalšie zdroje? -Áno! Ako prvé, neváhaj a vyskúšaj našu ďalšiu knihu [Django Girls Tutorial: Rozšírenie](https://djangogirls.gitbooks.io/django-girls-tutorial-extensions/content/). +Áno! Na webe nájdeš *obrovské množstvo* materiálov na trénovanie všemožných programátorských zručností. V tomto momente môže byť ťažké rozhodnúť sa, ako pokračovať, ale radi ti pomôžeme. Bez ohľadu na to, čo ťa zaujímalo pred Django Girls a čo ťa zaujalo počas tutoriálu, tu je niekoľko materiálov zdarma (alebo s veľkými časťami zadarmo), ktoré ti poslúžia na to, aby ťa dostali tam, kde chceš byť. -Neskôr môžeš skúsiť zdroje uvedené nižšie. Všetky sú veľmi odporúčané! +#### Django -- [Oficiálny Django návod](https://docs.djangoproject.com/en/1.11/intro/tutorial01/) -- [New Coder tutorials](http://newcoder.io/tutorials/) -- [Code Academy Python kurz](https://www.codecademy.com/en/tracks/python) -- [Code Academy HTML & CSS kurz](https://www.codecademy.com/tracks/web) -- [Django Carrots tutorál](https://github.com/ggcarrots/django-carrots) -- [Learn Python The Hard Way kniha](http://learnpythonthehardway.org/book/) -- [Getting Started With Django video návod](http://www.gettingstartedwithdjango.com/) -- [Two Scoops of Django 1.11: Best Practices for Django Web Framework book](https://www.twoscoopspress.com/products/two-scoops-of-django-1-11) -- [Hello Web App: Learn How to Build a Web App](https://hellowebapp.com/) - môžeš požiadať o licenciu na e-knihu zdarma kontaktovaním autorky Tracy Osborn e-mailom: \ No newline at end of file +- Naša knižka [Django Girls Tutorial: Extensions](https://tutorial-extensions.djangogirls.org/) +- [Oficiálny Django návod](https://docs.djangoproject.com/en/3.2/intro/tutorial01/) +- [Video návod Getting Started With Django](http://www.gettingstartedwithdjango.com/) +- [Django for Everybody Specialization](https://www.coursera.org/specializations/django) – niektoré z prednášok možno sledovať zdarma a môžeš za ne dostať Coursera certifikát + +#### HTML, CSS a JavaScript + +- [Kurz webového vývojárstva na Codecademy](https://www.codecademy.com/learn/paths/web-development) +- [freeCodeCamp](https://www.freecodecamp.org/) + +#### Python + +- [Python kurz na Codeacademy](https://www.codecademy.com/learn/learn-python) +- [Google Python kurz](https://developers.google.com/edu/python/) +- [Learn Python The Hard Way book](http://learnpythonthehardway.org/book/) – základné cvičenia sú voľne dostupné +- [New Coder tutorials](http://newcoder.io/tutorials/) – množstvo praktických príkladov, ako sa dá použiť Python +- [edX](https://www.edx.org/course?search_query=python) – väčšina kurzov je voľne dostupná, ale ak za ne chceš certifikát alebo kredity, za tie sa už platí +- [Python špecializácia](https://www.coursera.org/specializations/python) na Coursere – niektoré video prednášky sú voľne dostupné a môžeš za ne dostať Coursera certifikát +- [Python for Everybody](https://www.py4e.com/) - voľne dostupná verzia špecializácie Python for Everybody na Coursere + +#### Práca s dátami + +- [Kurz data science na Codecademy](https://www.codecademy.com/learn/paths/data-science) +- [edX](https://www.edx.org/course/?search_query=python&subject=Data%20Analysis%20%26%20Statistics) – väčšina kurzov je voľne dostupná, ale ak chceš certifikát alebo kredity, za tie sa už platí +- [Dataquest](https://www.dataquest.io/) – prvých 30 "misií" je zdarma + +Už sa nevieme dočkať, čo vytvoríš nabudúce! \ No newline at end of file