Hedwika / python-012021

Homework - Python 2021 Czechitas course
0 stars 0 forks source link

Hedvika: úkoly z osmé lekce #8

Closed Hedwika closed 3 years ago

Hedwika commented 3 years ago

Ahoj Jirko,

posílám úkoly z osmé lekce - najdeš je ve složce venv\Scripts\pujcovna - nahrála jsem si tam totiž i složku czechitas s projektem z hodiny.

Narazila jsem na jeden problém - když jdu na katalog/, nezobrazí se mi nic, ale na podstránce katalog/seznam se mi zobrazí to, co se zobrazit má. Zkoušela jsem to různě vyřešit, ale to nejlepší, na co jsem přišla, je, že když si zakomentuji v katalog\urls.py toto:

urlpatterns = [ path('seznam/', views.SeznamView.as_view(), name='seznam') ]

a tudíž tam nechám jen toto:

urlpatterns = [ path("", views.IndexView.as_view(), name="katalog") ]

Pak se mi na katalog/ zobrazuje, co má, ale na katalog/seznam logicky není nic. Nechápu, proč si v tomto případě path "" na katalog vezme a v tom prvním, kdy je tam i path "seznam/" ne a nevím, jak to opravit. Snad je moje vysvětlení problému srozumitelné... :)

Jdu se podívat na lekci 9, třeba tam najdu řešení, kdyby ano, nahraju novou verzi a okomentuji issue.

Zatím děkuji! Hedvika

Hedwika commented 3 years ago

Ahoj Jirko,

našla jsem řešení! Tedy, funguje to, ale přijde mi to takové "umatlané", nevím, jak to popsat :) Nechám tady nahranou prozatím starší verzi, o které ti píšu výše, a popíšu změny, které jsem udělala v PyCharmu a po kterých mi to funguje:

1) vytvořila jsem si ve složce katalog nový soubor "urlsseznam.py"

2) v pujcovna\urls.py jsem do patterns přidala další řádek, mám to takto: urlpatterns = [ path('admin/', admin.site.urls), path('katalog/', include("katalog.urls")), path('katalog/seznam/', include("katalog.urlsseznam")) ]

3) v katalog\urls jsem smazala napojení na třídu SeznamView, mám ho takto: urlpatterns = [ path('', views.IndexView.as_view(), name="katalog") ]

4) v katalog\urlsseznam mám jen volání SeznamView, nic jiného, takhle: urlpatterns = [ path('', views.SeznamView.as_view(), name='seznam') ]

Jak říkám, funguje, což je super :) ale nevím, jestli je v pohodě mít volání tříd ve dvou souborech a nešlo by to přece jen nechat jen v jednom. image

Děkuji za radu Hedvika

pesikj commented 3 years ago

Ahoj Hedviko,

jde to vyřešit jednodušeji. Django adresu skládá postupně, nejprve bere cestu k aplikaci se souboru pujcovna/urls.py a poté adresu konkrétní stránky (pohledu) ze souboru katalog/urls.py. Pokud tedy máš dva pohledy v aplikaci katalog, v souboru máš pujcovna/urls.py pořád jen jeden odkaz na aplikaci katalog a do souboru katalog/urls.py do seznamu urlpatterns vložíš dva záznamy. Ale musíš mít oba záznamy v jednom seznamu, nezakládej tam dva seznamy.

Pokud jde o seznam, tak django vezme část katalog/ ze souboru pujcovna/urls.py a následně část seznam/ ze souboru pujcovna/urls.py a oboje složí dohromady, takže výsledná stránka běží na http://localhost:8000/katalog/seznam/.

Snad je to srozumitelné :-)

Jirka

Hedwika commented 3 years ago

Ahoj Jirko,

děkuji za zprávu, je to srozumitelné a už jsem to opravila. Chápu, že má být jen jeden seznam a všimla jsem si, že ten druhý seznam "přemazal" první seznam, ale ještě mi úplně dává smysl ta logika za tím. :) Existuje nějaké vysvětlení, díky kterému bych si to lépe zapamatovala, nebo je potřeba to přijmout jako fakt? :) Než jsem odevzdala první verzi, dlouho jsem hledala v dokumentaci, ale neúaspěšně.

Děkuji a přeji hezký zbytek víkendu Hedvika

pesikj commented 3 years ago

Ahoj Hedviko,

v podstatě je to stejné, jako když uložíš hodnotu do proměnné a pak tam uložíš něco jiného, takže se původní hodnota ztratí. To není ani záležitost Djanga, ale obecné fungování Pythonu.

Jinak vidím, že už to máš v pěkném a funkčním stavu a můžu to obodovat :-)

Příklad 36

Správně :-)

Příklad 37

Správně :-)

Příklad 38

Teď to máš poskládané přesně tak, jak by to mělo být :-)

Příklad 39

Tady už máš vyřešenou další úlohu, ale pohled a adresa fungují :-)

Příklad 40

Super.

Shrnutí

Připisuji tedy 5 bodů, už máš dost na získání certifikátu.