5. diel - Databáza filmov v Django - Vytvorenie projektu a static files
V predchádzajúcom kvíze, Kvíz - Základy frameworku Django, sme si overili nadobudnuté skúsenosti z predchádzajúcich lekcií.
V dnešnom tutoriáli webových aplikácií s frameworkom Django v Pythone začneme tvorbu väčšej aplikácie spravujúcej databázu filmov. Dnes si vytvoríme šablónu 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áme:) Môžeme pokojne použiť už
vytvorený projekt mysite
z minulých lekcií alebo ho vytvoriť
príkazom:
django-admin startproject mysite
Pokiaľ projekt už existuje, zobrazí sa nám chybové hlásenie.
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. Presvedčíme sa teda v termináli:
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__
Inštalácia aplikácie
Ako je zvykom, našu aplikáciu 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é prerútovať URL adresu aplikácie z
http://localhost:8000/moviebook/
do
mysite\mysite\urls.py
a následne do
mysite\moviebook\urls.py
. Najprv si otvoríme routy projektu, teda
mysite\mysite\urls.py
a pridáme routu importujúce routy
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
. Tu potom vytvoríme
odkaz na view detail_filmu()
. Tiež je potrebné importovať súbor
views.py
, v ktorom sa toto view, metóda obsluhujúca danú
požiadavku, bude nachádzať:
from django.urls import path from . import views urlpatterns = [ path("", views.detail_filmu, name="moviebook_detail_filmu"), ]
Detail filmu
Ako prvú aplikáciu naučíme vypisovať detail filmu.
Vytvorenie view
Vytvoríme si view detail_filmu()
. 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 detail_filmu(request): return render(request, "moviebook/detail_filmu.html", dict(nazev_filmu="Strážci Galaxie", zanr="Fantasy", hodnoceni="11/10"))
Vytvorenie template
Vytvoríme náš detail_filmu.html
súbor, ktorý sa bude
nachádzať v priečinku mysite\moviebook\templates\moviebook/
.
Keď sa spustí Django server, pozbiera si všetky súbory zo
zložiek templates/
a static/
. Ak by sa šablóna
nachádzala iba v priečinku templates/
, bol by to problém,
pretože by iná aplikácia mohla mať aj súbor rovnakého mena (často sa
používa napríklad index.html
) a vznikol by konflikt. Preto je
účelné 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. Riadiacu konštrukciu ako if
,
for
a podobne vkladáme ako {% if %}
a pod. 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 nasledovný:
<!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>
Ako vždy sa uistíme, že sme súbor uložili v kódovaní UTF-8.
Spustenie aplikácie
Spustíme si Django server príkazom py manage.py runserver
.
Keď prejdeme na adresu http://localhost:8000/moviebook
, uvidíme
náš detail_filmu.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 súboru detail_filmu.html
pridať
obrázok. 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á svoj priečinok
static/
, kde sú tieto súbory uložené. Je len na nás, do akej
aplikácie si daný obrázok/súbor vložíme. Pokiaľ ale bude obrázok
určený pre aplikáciu moviebook
, je oveľa lepší obrázok
uložiť do mysite\moviebook\static\moviebook\obrazek.jpg
, než
kamkoľvek inam.
Presne to teraz urobíme. Zložky static/
a
moviebook/
si vytvoríme. Stiahneme si obrázok popcornu z prílohy
lekcie (je k nemu rovnaká relatívna cesta akú sme si vytvorili v našej
pracovnej zložke) a vložíme ho do
mysite\moviebook\static\moviebook\popcorn.jpg
.
Rovnako ako to bolo pri šablónach, aj tu Django po spustení
servera pristupuje ku všetkým zložkám static/
ako k jednej zložke. Ukladajme teda naše statické súbory do podpriečinka s
názvom danej aplikácie, zabránime tak konfliktom.
Teraz si môžeme tento obrázok vložiť do našej šablóny:
<!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ýsledok v prehliadači bude vyzerať takto:
To je pre dnešnú lekciu všetko.
V ďalšej lekcii, Databáza 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é 234x (156.98 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python