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í.

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

V dnešním tutoriálu webových aplikací s frameworkem Django v Pythonu započneme tvorbu větší aplikace spravující databázi filmů. Dnes si vytvoříme šablonu 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 pamatujeme :) Můžeme klidně použít již vytvořený projekt mysite z minulých lekcí nebo jej vytvořit příkazem:

django-admin startproject mysite

Pokud projekt již existuje, zobrazí se ná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. Přesvědčíme se tedy v terminálu:

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__

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\urls.py a následně do mysite\moviebook\urls.py. Nejprve si otevřeme routy projektu, tedy mysite\mysite\urls.py 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. Zde poté vytvoříme odkaz na view detail_filmu(). Také je potřeba importovat soubor views.py, ve kterém se toto view, metoda obsluhující daný požadavek, bude nalézat:

from django.urls import path
from . import views

urlpatterns = [
    path("", views.detail_filmu, name="moviebook_detail_filmu"),
]

Detail filmu

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

Vytvoření view

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

Vytvoření template

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

Když se spustí Django server, posbírá si všechny soubory ze složek templates/ a static/. Pokud by se šablona nacházela pouze ve složce templates/, byl by to problém, protože by jiná aplikace mohla mít také soubor stejného jména (často se používá třeba index.html) a vznikl by konflikt. Proto je účelné 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="cs">
<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íme, že jsme soubor uložili v kódování UTF-8.

Spuštění aplikace

Spustíme si Django server příkazem py manage.py runserver. Když přejdeme na adresu http://localhost:8000/moviebook, uvidíme náš detail_filmu.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 souboru detail_filmu.html přidat obrázek. 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. Je jen na nás, do jaké aplikace si daný obrázek/soubor vložíme. Pokud ale bude obrázek určený pro aplikaci moviebook, je mnohem lepší obrázek uložit do mysite\moviebook\static\moviebook\obrazek.jpg, než kamkoliv jinam.

Přesně to nyní uděláme. Složky static/ a moviebook/ si vytvoříme. Stáhneme si obrázek popcornu z přílohy lekce (je k němu stejná relativní cesta jakou jsme si vytvořili v naší pracovní složce) a vložíme ho do mysite\moviebook\static\moviebook\popcorn.jpg.

Stejně jako tomu bylo u šablon, i zde Django po spuštění serveru přistupuje ke všem složkám static/ jako k jedné složce. Ukládejme tedy naše statické soubory do podsložky s názvem dané aplikace, zabráníme tak konfliktům.

Nyní si můžeme tento obrázek vložit do naší šablony:

<!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ýsledek v prohlížeči bude vypadat takto:

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

To je pro dnešní lekci vše.

V další lekci, Databáze filmů v Django - Databáze, nás čeká práce s databází včetně administrace.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Předchozí článek
Kvíz - Základy frameworku Django
Všechny články v sekci
Django - Tvorba webů v Pythonu
Přeskočit článek
(nedoporučujeme)
Databáze filmů v Django - Databáze
Článek pro vás napsal MQ .
Avatar
Uživatelské hodnocení:
85 hlasů
Používám hlavně Python a zajímám se o Deep Learning a vše kolem.
Aktivity