5. diel - Databázy filmov v Django - Vytvorenie projektu a static files
V minulej lekcii, Kvíz - Základy frameworku Django , sme si vytvorili svoju prvú MVC aplikáciu v Django frameworku pre Python. Jednalo sa o jednoduchú MVC kalkulačku, na ktoré sme získali povedomie o tom, čo ktorá vrstva aplikácie robí a ako spolu komunikujú. V dnešnom tutoriále začneme tvorbu väčšie aplikácie tak, ako som minule sľúbil. Bude sa jednať o aplikácii spravujúca databáze filmov. Dnes si vytvoríme template a ukážeme si prácu so static files.
Vytvorenie projektu
Už tretíkrát prejdeme rovnakým postupom založenia novej aplikácie,
určite si ho už aspoň trochu pamätáte Záleží len na vás, či si
vytvoríte úplne nový projekt alebo aplikáciu pridáte do projektu z
minulých lekcií. Ja nazývam projekt vždy ako mysite
, ak si ho
pomenujete inak, nezabudnite mysite
ďalej v texte zameniť za svoj
názov. Môžete pokojne použiť už vytvorený projekt mysite
z
minulých lekcií alebo ho vytvoriť príkazom:
py -m django startproject mysite
Ak projekt už existuje, zobrazí sa vám chybová hláška.
Vytvorenie aplikácie
Ďalej si vytvoríme našu filmovú aplikáciu, ktorú pomenujeme "moviebook".
py manage.py startapp moviebook
Už vieme, že po spustení príkazu sa do konzoly nič nevypíše.
Inštalácia aplikácie
Ako je zvykom, naši aplikácii si nainštalujeme, aby sme s ňou mohli
pracovať. Do súboru mysite/mysite/settings.py
doplníme do
prí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', ]
Routovanie
Teraz je potrebné proroutovat URL adresu aplikácie z
http://localhost:8000/moviebook/
do
myší / myší / urls.py
a následne do
mysite/moviebook/urls.py
. Najprv si otvoríme ruty projektu, teda
mysite/mysite/urls.py
, importujete include
a pridáme
route importujúce ruty aplikácie:
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")), ]
Vytvoríme súbor mysite/moviebook/urls.py
, ktorý ešte
neexistuje. Tu potom vytvoríme odkaz na view index
. Tiež je
potrebné importovať súbor views.py
, v ktorom sa toto view,
metóda obsluhujúci daný požiadavku, nájde.
from django.urls import path from . import views urlpatterns = [ path("", views.index, name="moviebook_index"), ]
Detail filmu
Ako prvý aplikácii naučíme vypisovať detail filmu.
Vytvorenie view
Vytvoríme si view index
. Pretože jeho šablóna bude
zobrazovať detail nejakého filmu a my nemáme zatiaľ nastavenú databázu,
odovzdáme šablóne dáta zatiaľ na skúšku pomocou slovníka. Do súboru
mysite/moviebook/views.py
teda vložíme nasledujúci 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"))
Vytvorenie template
Vytvoríme náš index.html
súbor, ktorý sa bude nachádzať v
zložke mysite/moviebook/templates/moviebook/index.html
.
Keď sa spustí Django server, pozbiera si všetky súbory zo
zložiek templates
a static
. Pokiaľ by
index.html
bol iba v priečinku templates
, bol to
problém, pretože by iná aplikácia mohla mať tiež súbor
index.html
a vznikol by konflikt. Preto je nutné v priečinku
templates
každej aplikácie vždy ešte vytvoriť podpriečinok s
názvom tejto aplikácie.
Vkladanie premenných do Django templates pomocou {{ promenna }}
sme si už vyskúšali. Riadiaci konštrukcie ako if
,
for
a podobne vkladáme ako {% if %}
apod. My si
vypíšeme náš slovník, ktorý už máme vytvorený vo view a tu je
dostupný, pretože sme ho vytvorili ako parameter funkcie
render()
. Obsah šablóny bude nasledujúci:
<!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>
Ako vždy sa uistite, že ste súbor uložili v kódovaní UTF-8.
Spustenie servera
Spustíme si Django server príkazom py manage.py runserver
.
Keď prejdeme na adresu http://localhost:8000/moviebook
, uvidíme
náš index.html
s dátami zo slovníka:
Statické súbory
Teraz sa vrhneme do sľubovaných static files, to jest úložisko súborov,
ktoré budeme používať v našich templates. Povedzme, že si budeme chcieť
do svojho index.html
pridať obrázok a uvádzať k nemu absolútnu
cestu nie je práve rozumné. Preto má Django podporu pre statické súbory.
Každá aplikácia má svoju zložku static
, kde sú tieto súbory
uložené. Rovnako ako tomu bolo pri templátu, aj tu Django po spustení
servera pristupuje ku zložkám static
ako k jednej zložke. Je len
na vás do aké aplikácie si daný obrázok / súbor vložíte, ale ak bude
obrázok pre aplikáciu "moviebook", tak je oveľa lepší obrázok uložiť do
/mysite/moviebook/static/moviebook/obrazek.jpg
.
Presne to teraz urobíme, vezmite si ľubovoľný obrázok a vložte ho do
/mysite/moviebook/static/moviebook/obrazek.jpg
. Zložky
static
a moviebook
si vytvorte. Ďalej je potrebné
nastaviť, kde budeme mať zložku sa static files. Do
/mysite/mysite/settings.py
pridáme úplne dolu:
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
Keď už máme nastavené, je potreba súbory zhromaždiť. Túto akciu vykonáme príkazom:
py manage.py collectstatic
Teraz si môžeme tento obrázok vložiť do nášho templátu.
<!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ýsledok:
Toto je pre dnešné lekciu všetko. Nabudúce, v lekcii Databázy filmov v Django - Databáza , nás čaká práca s databázou vrátane administrácie.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 176x (156.98 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python