Lekce 5 - Databáze filmů v Django - Vytvoření projektu a static files
V předchozím kvízu, Kvíz - Základy frameworku Django, jsme si ověřili nabyté zkušenosti z předchozích lekcí.
V dnešním tutoriálu webových aplikací s frameworkem Django v Pythonu započneme tvorbu větší aplikace spravující databázi filmů. Dnes si vytvoříme šablonu 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 pamatujeme  Můžeme klidně použít již vytvořený projekt
 Můžeme klidně použít již vytvořený projekt mysite
z minulých lekcí nebo jej vytvořit příkazem:
django-admin startproject mysite
Pokud projekt již existuje, zobrazí se ná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.
Přesvědčíme se tedy v terminálu zadáním příkazu tree:
Výpis složky mysite pomocí příkazu tree:
C:.
├───ahoj_svete
│   ├───migrations
│   │   └───__pycache__
│   └───__pycache__
├───calculator
│   ├───migrations
│   │   └───__pycache__
│   ├───templates
│   │   └───calculator
│   └───__pycache__
├───moviebook
│   └───migrations
└───mysite
    └───__pycache__
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 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. Zde poté
vytvoříme odkaz na view detail_filmu(). Také je potřeba
importovat soubor views.py, ve kterém se toto view, metoda
obsluhující daný požadavek, bude nalézat:
from django.urls import path from . import views urlpatterns = [ path("", views.detail_filmu, name="moviebook_detail_filmu"), ]
Detail filmu
Jako první aplikaci naučíme vypisovat detail filmu.
Vytvoření view
Vytvoříme si view detail_filmu(). 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 detail_filmu(request): return render(request, "moviebook/detail_filmu.html", dict(nazev_filmu="Strážci Galaxie", zanr="Fantasy", hodnoceni="11/10"))
Vytvoření template
Vytvoříme náš detail_filmu.html soubor, který se bude
nacházet ve složce mysite\moviebook\templates\moviebook/.
Když se spustí Django server, posbírá si všechny soubory
ze složek templates/ a static/. Pokud by se šablona
nacházela pouze ve složce templates/, byl by to problém,
protože by jiná aplikace mohla mít také soubor stejného jména (často se
používá třeba index.html) a vznikl by konflikt. Proto je
účelné 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="cs"> <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íme, že jsme soubor uložili v kódování UTF-8.
Spuštění aplikace
Spustíme si Django server příkazem py manage.py runserver.
Když přejdeme na adresu http://localhost:8000/moviebook, uvidíme
náš detail_filmu.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 souboru detail_filmu.html přidat obrázek.
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. Je jen na nás, do jaké
aplikace si daný obrázek/soubor vložíme. Pokud ale bude obrázek určený
pro aplikaci moviebook, je mnohem lepší obrázek uložit do
mysite\moviebook\static\moviebook\obrazek.jpg, než kamkoliv
jinam.
Přesně to nyní uděláme. Složky static/ a
moviebook/ si vytvoříme. Stáhneme si obrázek popcornu z
přílohy lekce (je k němu stejná relativní cesta jakou jsme si vytvořili v
naší pracovní složce) a vložíme ho do
mysite\moviebook\static\moviebook\popcorn.jpg.
Stejně jako tomu bylo u šablon, i zde Django po spuštění
serveru přistupuje ke všem složkám static/
jako k jedné složce. Ukládejme tedy naše statické soubory do podsložky s
názvem dané aplikace, zabráníme tak konfliktům.
Nyní si můžeme tento obrázek vložit do naší šablony:
<!DOCTYPE html> <html lang="cs"> <head> <meta charset="UTF-8"> <title>MovieBook</title> </head> <body> {% load static %} <!-- 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/popcorn.jpg' %}" alt="Popcorn"> <!-- Zde vkládáme obrázek --> </body> </html>
Výsledek v prohlížeči bude vypadat takto:
To je pro dnešní lekci vše.
V další lekci, Databáze filmů v Django - Databáze, nás čeká práce s databází včetně administrace.
Měl 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 444x (156.98 kB)
                                    
                     Aplikace je včetně zdrojových kódů                                            v jazyce Python                                                                        
        
 
				

