Lekce 5 - Databáze filmů v Django - Vytvoření projektu a static files
V minulé lekci, Kalkulačka v Django frameworku, jsme si vytvořili svou první MVC aplikaci v Django frameworku pro Python. Jednalo se o jednoduchou MVC kalkulačku, na které jsme získali povědomí o tom, co která vrstva aplikace dělá a jak spolu komunikují. V dnešním tutoriálu započneme tvorbu větší aplikace tak, jak jsem minule slíbil. Bude se jednat o aplikaci spravující databázi filmů. Dnes si vytvoříme template a ukážeme si práci se static files.
Vytvoření projektu
Již potřetí projdeme stejným postupem založení nové aplikace, určitě
si jej již alespoň trochu pamatujete Záleží jen na vás, zda si vytvoříte úplně nový projekt nebo
aplikaci přidáte do projektu z minulých lekcí. Já nazývám projekt vždy
jako
mysite
, pokud si jej pojmenujete jinak, nezapomeňte
mysite
dále v textu zaměnit za svůj název. Můžete klidně
použít již vytvořený projekt mysite
z minulých lekcí nebo
jej vytvořit příkazem:
py -m django startproject mysite
Pokud projekt již existuje, zobrazí se vám chybová hláška.
Vytvoření aplikace
Dále si vytvoříme naši filmovou aplikaci, kterou pojmenujeme "moviebook".
py manage.py startapp moviebook
Již víme, že po spuštění příkazu se do konzole nic nevypíše.
Instalace aplikace
Jak je zvykem, naši aplikaci si nainstalujeme, abychom s ní mohli pracovat.
Do souboru mysite/mysite/settings.py
doplníme do příslušného
listu položku "moviebook":
INSTALLED_APPS = [ 'moviebook', 'calculator', 'ahoj_svete', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
Routování
Nyní je potřeba proroutovat URL adresu aplikace z
http://localhost:8000/moviebook/
do ` mysite/mysite/urls.py` a
následně do mysite/moviebook/urls.py
. Nejprve si otevřeme routy
projektu, tedy mysite/mysite/urls.py
, naimportujeme
include
a přidáme routu importující routy aplikace:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('', include("ahoj_svete.urls")), path("calculator_aplikace/", include("calculator.urls")), path("moviebook/", include("moviebook.urls")), ]
Vytvoříme soubor mysite/moviebook/urls.py
, který ještě
neexistuje. Zde poté vytvoříme odkaz na view index
. Také je
potřeba importovat soubor views.py
, ve kterém se toto view,
metoda obsluhující daný požadavek, nalézá.
from django.urls import path from . import views urlpatterns = [ path("", views.index, name="moviebook_index"), ]
Detail filmu
Jako první aplikaci naučíme vypisovat detail filmu.
Vytvoření view
Vytvoříme si view index
. Protože jeho šablona bude
zobrazovat detail nějakého filmu a my nemáme zatím nastavenou databázi,
předáme šabloně data zatím na zkoušku pomocí slovníku. Do souboru
mysite/moviebook/views.py
tedy vložíme následující obsah:
from django.shortcuts import render def index(request): return render(request, "moviebook/index.html", dict(nazev_filmu="Strážci Galaxie", zanr="Fantasy", hodnoceni="11/10"))
Vytvoření template
Vytvoříme náš index.html
soubor, který se bude nacházet ve
složce mysite/moviebook/templates/moviebook/index.html
.
Když se spustí Django server, posbírá si všechny soubory
ze složek templates
a static
. Pokud by
index.html
byl pouze ve složce templates
, byl to
problém, protože by jiná aplikace mohla mít také soubor
index.html
a vznikl by konflikt. Proto je nutné ve složce
templates
každé aplikace vždy ještě vytvořit podsložku s
názvem této aplikace.
Vkládání proměnných do Django templates pomocí
{{ promenna }}
jsme si již vyzkoušeli. Řídící konstrukce jako
if
, for
a podobně vkládáme jako
{% if %}
apod. My si vypíšeme náš slovník, který již máme
vytvořený ve view a zde je dostupný, protože jsme ho vytvořili jako
parametr funkce render()
. Obsah šablony bude následující:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MovieBook</title> </head> <body> Název filmu: {{nazev_filmu}} <br> Žánr: {{zanr}} <br> Hodnocení: {{hodnoceni}} </body> </html>
Jako vždy se ujistěte, že jste soubor uložili v kódování UTF-8.
Spuštění serveru
Spustíme si Django server příkazem py manage.py runserver
.
Když přejdeme na adresu http://localhost:8000/moviebook
, uvidíme
náš index.html
s daty ze slovníku:
Statické soubory
Nyní se vrhneme do slibovaných static files, to jest úložiště souborů,
které budeme používat v našich templates. Řekněme, že si budeme chtít do
svého index.html
přidat obrázek a uvádět k němu absolutní
cestu není zrovna rozumné. Proto má Django podporu pro statické soubory.
Každá aplikace má svou složku static
, kde jsou tyto soubory
uloženy. Stejně jako tomu bylo u templatů, i zde Django po spuštění
serveru přistupuje ke složkám static
jako k jedné složce. Je
jen na vás do jaké aplikace si daný obrázek/soubor vložíte, ale pokud bude
obrázek pro aplikaci "moviebook", tak je mnohem lepší obrázek uložit do
/mysite/moviebook/static/moviebook/obrazek.jpg
.
Přesně to nyní uděláme, vezměte si libovolný obrázek a vložte ho do
/mysite/moviebook/static/moviebook/obrazek.jpg
. Složky
static
a moviebook
si vytvořte. Dále je potřeba
nastavit, kde budeme mít složku se static files. Do
/mysite/mysite/settings.py
přidáme úplně dolů:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
Když již máme nastaveno, je potřeba soubory shromáždit. Tuto akci provedeme příkazem:
py manage.py collectstatic
Nyní si můžeme tento obrázek vložit do našeho templatu.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MovieBook</title> </head> <body> {% load staticfiles %} <!-- Slouží pro načtení statických souborů --> Název filmu: {{nazev_filmu}} <br> Žánr: {{zanr}} <br> Hodnocení: {{hodnoceni}} <br> Náš obrázek: <br> <img src={% static 'moviebook/obrazek.jpg' %} alt=""> <!-- Zde vkládáme obrázek --> </body> </html>
Výsledek:
Toto je pro dnešní lekci vše. Příště, v lekci Databáze filmů v Django - Databáze, nás čeká práce s databází včetně administrace.
Měla jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 47x (775.35 kB)
Aplikace je včetně zdrojových kódů v jazyce Python
Komentáře


Zobrazeno 4 zpráv z 4.