Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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:

MovieBook
http://localhos­t:8000/moviebo­ok/

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:

MovieBook
http://localhos­t:8000/moviebo­ok/

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

 

Predchádzajúci článok
Kvíz - Základy frameworku Django
Všetky články v sekcii
Základy Django frameworku pre Python
Preskočiť článok
(neodporúčame)
Databáza filmov v Django - Databáza
Článok pre vás napísal MQ .
Avatar
Užívateľské hodnotenie:
80 hlasov
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity