68 Tsüklid HTML-is
Jinja2 võimaldab kasutada tsükleid ka html-failis. Näiteks võime lisada arvud 0-st 10-ni järgnevalt:
{% for i in range(11) %} {{ i }} {% endfor %}
Lisame selle tsükli meie näitefaili avaleht.html. Faili sisu on nüüd järgnev:
{% extends 'baas.html' %} {% block content %} <h1>1. teema</h1> {% for i in range(11) %} {{ i }} {% endfor %} {% endblock %}
Kui jätame kõik muu samaks, aga asendame keskkonnas PythonAnywhere faili avaleht.html ning pärast seda valime menüüst Web → Reload kasutaja.pythonanywhere.com (sõna kasutaja asemel on igaühel oma kasutajanimi). Kui nüüd veebilehte värskendame, on tulemus järgnev:
Kui me aga lisaksime selle tsükli faili baas.html body-ossa, siis kuvataks arve 1-st 10-ni kõikidel lehtedel, kus kuvatakse html-faili sisu, mis viitab failile baas.html.
Nüüd aga vaatame, kuidas postitusi kuvada ja jätame juba loodud kujunduse praegu kõrvale. Nüüd kasutame kokku 3 faili. Olgu faili baas.html sisu nüüd järgnev:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> {% block head %} <title>Minu esimene veebileht</title> {% endblock %} </head> <body> {% block body %} {% endblock %} </body> </html>
Postituste kuvamiseks muudame app.py sisu ja seejärel loome faili postitused.html. Olgu meil postitused app.py failis sõnastike järjendina.
from flask import Flask, render_template app = Flask(__name__) koik_postitused = [{'pealkiri': 'Postitus 1', 'sisu':'1. postituse sisu', 'autor': 'Heidi'}, {'pealkiri': 'Postitus 2', 'sisu':'2. postituse sisu', 'autor': 'Elle'}] @app.route('/postitused') def blogi(): return render_template("postitused.html", postitused=koik_postitused) if __name__ == "__main__": app.run()
Nüüd aga soovime neid postitusi kuvada. Selleks saame kasutada tsüklit html-failis. Loome faili postitused.html, mille sisu on järgnev:
{% extends 'baas.html' %} {% block body %} <h1>Postitused</h1> {% for postitus in postitused %} <h2>{{ postitus.pealkiri }}</h2> <h3>Autor: {{ postitus.autor }}</h3> <p>{{ postitus.sisu }}</p> {% endfor %} {% endblock %}
Kui meil app.py failis oli sõnastike list muutujas koik_postitused ja renderdamisel lisasime postitused=koik_postitused
, siis tsüklis on meil vaja kasutada sama muutujat – meie näite puhul postitused. Meie näite puhul on sõnastiku võtmed pealkiri, autor ja sisu, mida kasutame ka for-tsüklis. Selle näite tulemus näeb välja järgnev: