Lekce 5 - Databáze filmů v Django - Vytvoření projektu a static files

Python Django Databáze filmů v Django - Vytvoření projektu a static files

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Kalkulačka v Django frameworku, jsme si vytvořili svou první MVC aplikaci v Django frameworku pro Python. Jednalo se o jednoduchou MVC kalkulačku, na které jsme získali povědomí o tom, co která vrstva aplikace dělá a jak spolu komunikují. V dnešním tutoriálu započneme tvorbu větší aplikace tak, jak jsem minule slíbil. Bude se jednat o aplikaci spravující databázi filmů. Dnes si vytvoříme template a ukážeme si práci se static files.

Vytvoření projektu

Již potřetí projdeme stejným postupem založení nové aplikace, určitě si jej již alespoň trochu pamatujete :) Záleží jen na vás, zda si vytvoříte úplně nový projekt nebo aplikaci přidáte do projektu z minulých lekcí. Já nazývám projekt vždy jako mysite, pokud si jej pojmenujete jinak, nezapomeňte mysite dále v textu zaměnit za svůj název. Můžete klidně použít již vytvořený projekt mysite z minulých lekcí nebo jej vytvořit příkazem:

py -m django startproject mysite

Pokud projekt již existuje, zobrazí se vám chybová hláška.

Vytvoření aplikace

Dále si vytvoříme naši filmovou aplikaci, kterou pojmenujeme "moviebook".

py manage.py startapp moviebook

Již víme, že po spuštění příkazu se do konzole nic nevypíše.

Instalace aplikace

Jak je zvykem, naši aplikaci si nainstalujeme, abychom s ní mohli pracovat. Do souboru mysite/mysite/settings.py doplníme do pří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',
]

Routování

Nyní je potřeba proroutovat URL adresu aplikace z http://localhost:8000/moviebook/ do ` mysite/mysite/ur­ls.py` a následně do mysite/moviebook/urls.py. Nejprve si otevřeme routy projektu, tedy mysite/mysite/urls.py, naimportujeme include a přidáme routu importující routy aplikace:

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")),
]

Vytvoříme soubor mysite/moviebook/urls.py, který ještě neexistuje. Zde poté vytvoříme odkaz na view index. Také je potřeba importovat soubor views.py, ve kterém se toto view, metoda obsluhující daný požadavek, nalézá.

from django.urls import path
from . import views

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

Detail filmu

Jako první aplikaci naučíme vypisovat detail filmu.

Vytvoření view

Vytvoříme si view index. Protože jeho šablona bude zobrazovat detail nějakého filmu a my nemáme zatím nastavenou databázi, předáme šabloně data zatím na zkoušku pomocí slovníku. Do souboru mysite/moviebook/views.py tedy vložíme následující 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"))

Vytvoření template

Vytvoříme náš index.html soubor, který se bude nacházet ve složce mysite/moviebook/templates/moviebook/index.html.

Když se spustí Django server, posbírá si všechny soubory ze složek templates a static. Pokud by index.html byl pouze ve složce templates, byl to problém, protože by jiná aplikace mohla mít také soubor index.html a vznikl by konflikt. Proto je nutné ve složce templates každé aplikace vždy ještě vytvořit podsložku s názvem této aplikace.

Vkládání proměnných do Django templates pomocí {{ promenna }} jsme si již vyzkoušeli. Řídící konstrukce jako if, for a podobně vkládáme jako {% if %} apod. My si vypíšeme náš slovník, který již máme vytvořený ve view a zde je dostupný, protože jsme ho vytvořili jako parametr funkce render(). Obsah šablony bude následující:

<!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>

Jako vždy se ujistěte, že jste soubor uložili v kódování UTF-8.

Spuštění serveru

Spustíme si Django server příkazem py manage.py runserver. Když přejdeme na adresu http://localhost:8000/moviebook, uvidíme náš index.html s daty ze slovníku:

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

Statické soubory

Nyní se vrhneme do slibovaných static files, to jest úložiště souborů, které budeme používat v našich templates. Řekněme, že si budeme chtít do svého index.html přidat obrázek a uvádět k němu absolutní cestu není zrovna rozumné. Proto má Django podporu pro statické soubory. Každá aplikace má svou složku static, kde jsou tyto soubory uloženy. Stejně jako tomu bylo u templatů, i zde Django po spuštění serveru přistupuje ke složkám static jako k jedné složce. Je jen na vás do jaké aplikace si daný obrázek/soubor vložíte, ale pokud bude obrázek pro aplikaci "moviebook", tak je mnohem lepší obrázek uložit do /mysite/moviebook/static/moviebook/obrazek.jpg.

Přesně to nyní uděláme, vezměte si libovolný obrázek a vložte ho do /mysite/moviebook/static/moviebook/obrazek.jpg. Složky static a moviebook si vytvořte. Dále je potřeba nastavit, kde budeme mít složku se static files. Do /mysite/mysite/settings.py přidáme úplně dolů:

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

Když již máme nastaveno, je potřeba soubory shromáždit. Tuto akci provedeme příkazem:

py manage.py collectstatic

Nyní si můžeme tento obrázek vložit do našeho templatu.

<!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ýsledek:

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

Toto je pro dnešní lekci vše. Příště, v lekci Databáze filmů v Django - Databáze, nás čeká práce s databází včetně administrace.


 

Stáhnout

Staženo 5x (775.35 kB)
Aplikace je včetně zdrojových kódů v jazyce Python

 

 

Článek pro vás napsal MQ .
Avatar
Jak se ti líbí článek?
2 hlasů
Autor je srdcem Pythonista.
Miniatura
Předchozí článek
Kalkulačka v Django frameworku
Miniatura
Všechny články v sekci
Django framework pro Python
Miniatura
Následující článek
Databáze filmů v Django - Databáze
Aktivity (4)

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!