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

Šablónové tagy v Djangu nám umožňujú previesť Pythonovské veci do HTML, takže dynamické webové stránky môžeš vytvoriť rýchlejš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:

blog/templates/blog/post_list.html

{{ 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 si videla výsledky:

Obrázok 13.1

Ako vidíš, dostali sme len toto:

blog/templates/blog/post_list.html

<QuerySet [<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:

blog/templates/blog/post_list.html

{% for post in posts %}
    {{ post }}
{% endfor %}

Vyskúšaj si to vo svojej šablóne.

Obrázok 13.2

Funguje to! Ale my chceme, aby sa príspevky zobrazili ako tie statické, ktoré sme vytvorili predtým v kapitole Úvod do HTML. Môžeš skombinovať HTML a šablónové tagy. Naše body bude vyzerať takto:

blog/templates/blog/post_list.html

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

Obrázok 13.3

Všimla si si, že sme tentokrát použili trochu iný zápis {{ post.title }} alebo {{ post.text }}? Pristupujeme k údajom v každom z polí definovanom v našom Post modeli. Okrem toho |linebreaks 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

command-line

$ git status
[...]
$ git add --all .
$ 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:

PythonAnywhere command-line

$ 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! Ak sa blogové príspevky na tvojej PythonAnywhere stránke nezhodujú s príspevkami na blogu ktorý beží na tvojom lokálnom počítači, to je v poriadku. Databázy na tvojom lokálnom počítači a na PythonAnywhere sa nesznchronizujú spolu so zvyšnými subormi.

Gratulujeme! Teraz skús pridať nový príspevok cez Django admin (nezabudni pridať published_date!). Uisti sa, že si v Django admin prostredi na svojej stránke na PythonAnywhere, https://yourname.pythonanywhere.com/admin. Následne obnov stránku aby si zistila či sa príspevok tam objaví.

Funguje ako hodinky? Sme hrdí! Teraz si na chvíľku oddýchni od počítača, zaslúžiš si prestávku. :)

Obrázok 13.4

results matching ""

    No results matching ""