Šablóny Django
Je na čase zobraziť nejaké údaje! Na to nám Django ponúka užitočné vstavané šablónové tagy.
Čo sú to šablónové tagy?
V HTML vlastne nemôžeš písať pythonský kód, pretože prehliadače mu nerozumejú. Poznajú len HTML. Vieme, že HTML je skôr statické, kým Python je oveľa dynamickejší.
Django šablónové tagy nám umožňujú previesť Pythonské veci do HTML, takže dynamické webové stránky môžeš vytvoriť rýchlejšie a jednoduchšie. Paráda!
Zobraz šablónu so zoznamom príspevkov
V predchádzajúcej kapitole sme našej šablóne dali zoznam príspevkov v premennej posts
. Teraz to zobrazíme v HTML.
Na vypísanie premennej v Django šablónach použijeme dvojitú zloženú zátvorku s názvom premennej vo vnútri, asi takto:
{{ posts }}
Vyskúšaj to vo svojej šablóne blog/templates/blog/post_list.html
. Nahraď všetko od druhého <div>
po tretí </div>
týmto kódom: {{ posts }}
. Ulož súbor a obnov stránku, aby sme videli výsledky:
Ako vidíš, dostali sme len toto:
[<Post: My second post>, <Post: My first post>]
To znamená, že to Django chápe ako zoznam objektov. Pamätáš si z kapitoly Úvod do Pythonu ako môžeme zobraziť zoznamy? Áno, cyklami! V Django šablóne ich urobíš takto:
{% for post in posts %}
{{ post }}
{% endfor %}
Vyskúšaj si to vo svojej šablóne.
Funguje to! Ale my chceme, aby sa zobrazili ako tie statické príspevky, ktoré sme vytvorili predtým v kapitole Úvod do HTML. Môžeš skombinovať HTML a šablónové tagy. Naše body
bude vyzerať takto:
<div>
<h1><a href="/">Django Girls Blog</a></h1>
</div>
{% for post in posts %}
<div>
<p>published: {{ post.published_date }}</p>
<h1><a href="">{{ post.title }}</a></h1>
<p>{{ post.text|linebreaksbr }}</p>
</div>
{% endfor %}
Všetko, čo dáš medzi {% for %}
a {% endfor %}
sa bude opakovať pre každý objekt v zozname. Obnov svoju stránku:
Všimla si si, že sme tentokrát použili trochu odlišné zápisy {{ post.title }}
alebo {{ post.text }}
? Pristupujeme k údajom v každom z polí definovanom v našom Post
modeli. Okrem toho |linebreaksbr
preposiela texty príspevkov cez filter, ktorý konvertuje zalomenie riadkov na odstavce.
Ešte jedna vec
Bolo by fajn vidieť či bude tvoja web stránka stále funkčná aj na Internete, však? Skúsme to znova nasadiť na PythonAnywhere. Tu je rekapitulácia postupu...
- Najskôr pošli svoj kód na Github
$ git status
[...]
$ git add -A .
$ git status
[...]
$ git commit -m "Modified templates to display posts from database."
[...]
$ git push
- Potom sa prihlás do PythonAnywhere a choď do Bash konzoly (alebo spusti novú) a zadaj:
$ cd my-first-blog
$ git pull
[...]
- A nakoniec prejdi na záložku Web a stlač Reload na svojej webovej aplikácii. Aktualizácia by mala byť online!
Gratulujeme! Teraz skús pridať nový príspevok v Django adminovi (nezabudni pridať published_date!), potom obnov stránku a pozri sa, či sa príspevok zobrazí.
Funguje ako hodinky? Sme hrdí! Teraz si na chvíľku oddýchni od počítača, zaslúžiš si trochu voľna. :)