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
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:
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 330x (156.98 kB)
Aplikace je včetně zdrojových kódů v jazyce Python