5. diel - Databáza filmov v Django - Založenie 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 predchádzajúcich lekcií alebo ho
vytvoriť príkazom:
django-admin startproject mysite
Ak 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 zadaním príkazu tree:
Listing the mysite folder using the tree command:
C:.
├───hello_world
│ ├───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',
'hello_world',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Routovanie
Teraz je potrebné preroutovať 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 routu pridáme importujúce routy
aplikácie:
from django.contrib import admin from django.urls import path, include urlpatterns = [ path("admin/", admin.site.urls), path("", include("hello_world.urls")), path("calculator_application/", include("calculator.urls")), path("moviebook/", include("moviebook.urls")), ]
Vytvoríme súbor mysite\moviebook\urls.py. Tu potom vytvoríme
odkaz na view movie_detail(). 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.movie_detail, name="moviebook_movie_detail"), ]
Detail filmu
Na prvom mieste aplikáciu naučíme vypisovať detail filmu.
Vytvorenie view
Vytvoríme si view movie_detail(). 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 movie_detail(request): return render(request, "moviebook/movie_detail.html", dict(movie_title="Guardians of the Galaxy", genre="Fantasy", rating="11/10"))
Vytvorenie template
Vytvoríme náš movie_detail.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
vhodné 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 {{ variable }}
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 takýto:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>MovieBook</title> </head> <body> Movie title: {{movie_title}} <br> Genre: {{genre}} <br> Rating: {{rating}} </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 server Django príkazom py manage.py runserver.
Keď prejdeme na adresu http://localhost:8000/moviebook, uvidíme
náš movie_detail.html s dátami zo slovníka:
Statické súbory
Teraz sa vrhneme do sľubovaných static files, čo je
úložisko súborov, ktoré budeme používať v našich templates. Povedzme,
že si budeme chcieť do súboru movie_detail.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. Ak ale bude obrázok určený pre
aplikáciu moviebook, je oveľa lepšie obrázok uložiť do
mysite\moviebook\static\moviebook\image.jpg, než kamkoľvek
inam.
Presne to teraz urobíme. Vytvoríme si zložky static/ a
moviebook/. 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="en"> <head> <meta charset="UTF-8"> <title>MovieBook</title> </head> <body> {% load static %} <!-- Used to load static files --> Movie Title: {{movie_title}} <br> Genre: {{genre}} <br> Rating {{rating}} <br> Our image: <br> <img src="{% static 'moviebook/popcorn.jpg' %}" alt="Popcorn"> <!-- Here we insert the image --> </body> </html>
Výsledok v prehliadači bude vyzerať takto:
To je v rámci dnešnej lekcie všetko.
V nasledujúcej 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é 107x (167.34 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python
