Django Urls, views, templates
Django URL Adresa URL je webová adresa, která je vidět v adresním řádku prohlížeče Například 127.0.0.1:8000 nebo https://djangoproject.com V Djangu používáme tzv. URLconf (URL konfiguraci), což je sada vzorů, podle kterých Django zpracuje URL a pokusí se najít správné view
Django URL Každá stránka na internetu potřebuje svou vlastní URL Tímto způsobem aplikace ví, co by měla ukázat uživateli Přepište soubor drivers/urls.py, aby vypadal takto: Django nyní přesměruje vše, co přichází na http://127.0.0.1:8000 do stations/urls.py a hledá zde další instrukce
Django URL Mohli bychom celou URL konfiguraci vložit do drivers/urls.py a vše bude fungovat Ovšem pro lepší přenositelnost, přeneseme URL konfiguraci rovnou do stations/urls.py a v původním URL se na ni budeme pouze odkazovat Vytvořme nový prázdný soubor stations/urls.py a přidejme mapování na naše pohledy (views): Poznámka: po zadání URL stations/hello se zavolá funkce hello ve stations/views s jedním parametrem request
Význam mapování URL na views Po zadání URL adresy http://127.0.0.1:8000/stations/hello se zavolá funkce hello ve skriptu stations/views.py s jedním parametrem request Po zadání URL adresy http://127.0.0.1:8000/stations/company/1 se zavolá funkce company_name ve skriptu stations/views.py s parametry request a company_id = 1
Views View (pohled) = místo, kam píšeme logiku naší aplikace Bude požadovat informace z modelu, který jsme vytvořily dříve, a předá je šabloně View jsou vlastně jen Python funkce, na které jsou mapovány URL adresy Funkce mají jeden povinný parametr request a podle potřeby další (např. klíč objektu) View funkce vrací HttpResponse, který vrátí data nebo vyhodí výjimku
Views Otevřete soubor views.py a vytvořte funkci hello, na kterou odkazuje dříve vytvořená URL adresa Zatím jsme definovali pouze první funkci hello, takže zbylé funkce musíme prozatím ve skriptu stations/urls.py zakomentovat, jinak by došlo při spuštění k chybě Pokud se nyní podíváme na adresu http://127.0.0.1:8000/stations/hello, objeví se stránka s nápisem Hello, World!
Views Otevřete soubor views.py a pod funkci hello přidejte novou funkci company_name Přidali jsme funkci company_name, tudíž se na ni můžeme v url odkazovat Pokud se podíváme na http://127.0.0.1:8000/stations/company/1, tak uvidíme např. Company id: 1 Shell
Vysvětlení funkcí Funkce get_object_or_404() Tato funkce šetří práci a zastupuje následující kód Funkce render() Prvním argumentem je request, tj. vše, co přijímáme od uživatele přes internet Jako druhý argument přijímá jméno šablony a jako třetí (nepovinný) argument slovník Výstupem funkce je objekt HttpResponse s vykreslenou šablonou podle dodaných proměnných
Views V souboru views.py pod funkce hello a company_name přidejte novou funkci company_index Nyní už se můžeme na funkci company_index odkazovat i v url (odkomentujeme ji):
Views Předchozí funkce hello a company_name vrací pouze text Pokud bychom chtěli zajímavěji formátovat text, využijeme html Django odděluje vzhled od kódu, tj. kód načte šablonu (.html) a předá ji obsah Každá view funkce obvykle používá svou šablonu
Template (šablona) Šablona = soubor, který umožňuje zobrazit různé informace ve stejném formátu Následující funkce načítá šablonu company_index.html a předá jí proměnnou companies, obsahující seznam objektů typu Company, který získala předchozím databázovým dotazem
Template (šablona) Šablonu vytvoříme v adresáři stations/templates/stations, kterou nazveme company_index.html a doplníme do ní následující kód: Tímto příkazem {% for company in companies %} iterujeme seznam objektů typu Company Příkaz {company.name} vypíše názvy všech objektů typů Company Příkaz {% for s in company.station_set.all %} iteruje všechny stanice dané společnosti Company Příkaz {s.name} vypíše názvy jednotlivých stanic
Template (šablona) Po spuštění adresy http://127.0.0.1:8000/stations/company_index uvidíte podobnou stránku:
Funkce station_index() Do view.py dopíšeme funkci station_index: Zároveň ji odkomentujeme v urls.py, abychom se na ni mohli odkazovat Po spuštění: Vytvoříme šablonu station_index.html s následujícím kódem:
Pokračování příště Doděláme funkce capacity_search() a station_edit() pomocí formulářů