Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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:

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

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:

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

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

 

Predchádzajúci článok
Kvíz - Základy frameworku Django
Všetky články v sekcii
Tvorba webov v 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:
1 hlasov
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity