IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

5. diel - Databázy filmov v Django - Vytvorenie projektu a static files

V minulej lekcii, Kvíz - Základy frameworku Django , sme si vytvorili svoju prvú MVC aplikáciu v Django frameworku pre Python. Jednalo sa o jednoduchú MVC kalkulačku, na ktoré sme získali povedomie o tom, čo ktorá vrstva aplikácie robí a ako spolu komunikujú. V dnešnom tutoriále začneme tvorbu väčšie aplikácie tak, ako som minule sľúbil. Bude sa jednať o aplikácii spravujúca databáze filmov. Dnes si vytvoríme template 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áte :) Záleží len na vás, či si vytvoríte úplne nový projekt alebo aplikáciu pridáte do projektu z minulých lekcií. Ja nazývam projekt vždy ako mysite, ak si ho pomenujete inak, nezabudnite mysite ďalej v texte zameniť za svoj názov. Môžete pokojne použiť už vytvorený projekt mysite z minulých lekcií alebo ho vytvoriť príkazom:

py -m django startproject mysite

Ak projekt už existuje, zobrazí sa vám chybová hláška.

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.

Inštalácia aplikácie

Ako je zvykom, naši aplikácii 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é proroutovat URL adresu aplikácie z http://localhost:8000/moviebook/ do myší / myší / urls.py a následne do mysite/moviebook/urls.py. Najprv si otvoríme ruty projektu, teda mysite/mysite/urls.py, importujete include a pridáme route importujúce ruty 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, ktorý ešte neexistuje. Tu potom vytvoríme odkaz na view index. Tiež je potrebné importovať súbor views.py, v ktorom sa toto view, metóda obsluhujúci daný požiadavku, nájde.

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="moviebook_index"),
]

Detail filmu

Ako prvý aplikácii naučíme vypisovať detail filmu.

Vytvorenie view

Vytvoríme si view index. 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 index(request):
    return render(request, "moviebook/index.html", dict(nazev_filmu="Strážci Galaxie", zanr="Fantasy", hodnoceni="11/10"))

Vytvorenie template

Vytvoríme náš index.html súbor, ktorý sa bude nachádzať v zložke mysite/moviebook/templates/moviebook/index.html.

Keď sa spustí Django server, pozbiera si všetky súbory zo zložiek templates a static. Pokiaľ by index.html bol iba v priečinku templates, bol to problém, pretože by iná aplikácia mohla mať tiež súbor index.html a vznikol by konflikt. Preto je nutné 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. Riadiaci konštrukcie ako if, for a podobne vkladáme ako {% if %} apod. 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 nasledujúci:

<!DOCTYPE html>
<html lang="en">
<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 uistite, že ste súbor uložili v kódovaní UTF-8.

Spustenie servera

Spustíme si Django server príkazom py manage.py runserver. Keď prejdeme na adresu http://localhost:8000/moviebook, uvidíme náš index.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 svojho index.html pridať obrázok a 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á svoju zložku static, kde sú tieto súbory uložené. Rovnako ako tomu bolo pri templátu, aj tu Django po spustení servera pristupuje ku zložkám static ako k jednej zložke. Je len na vás do aké aplikácie si daný obrázok / súbor vložíte, ale ak bude obrázok pre aplikáciu "moviebook", tak je oveľa lepší obrázok uložiť do /mysite/moviebook/static/moviebook/obrazek.jpg.

Presne to teraz urobíme, vezmite si ľubovoľný obrázok a vložte ho do /mysite/moviebook/static/moviebook/obrazek.jpg. Zložky static a moviebook si vytvorte. Ďalej je potrebné nastaviť, kde budeme mať zložku sa static files. Do /mysite/mysite/settings.py pridáme úplne dolu:

STATIC_ROOT = os.path.join(BASE_DIR, "static/")

Keď už máme nastavené, je potreba súbory zhromaždiť. Túto akciu vykonáme príkazom:

py manage.py collectstatic

Teraz si môžeme tento obrázok vložiť do nášho templátu.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>MovieBook</title>
</head>
<body>
    {% load staticfiles %} <!-- 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/obrazek.jpg' %} alt=""> <!-- Zde vkládáme obrázek -->
</body>
</html>

výsledok:

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

Toto je pre dnešné lekciu všetko. Nabudúce, v lekcii Databázy 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é 176x (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ázy 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