64 Jinja2

Selleks, et ei peaks iga html-faili tegema algusest, tuleb appi Jinja2 mallimootor, mis on Flaskiga kaasas.

Faili, kus on html-struktuur (paneme meie näites selle faili nimeks baas.html), lisame näiteks {% block head %} {% endblock %} ja {% block body %} {% endblock %}. Esimese lisame head-ossa ja teise body-ossa. Sellesse faili saame kirjutada need osad, mis on kõikides html-failides samad. Kui sisu on näiteks body-osas, aga blokist väljaspool, siis kuvatakse seda kõikides failides, milles sellele failile viidatakse. Kui aga kirjutame selles põhifailis midagi blokkide sisse, siis kuvatakse seda kõikides viidatud failides ainult juhul, kui sama blokki nendes failides ei ole. Kui alamfailis on blokk olemas, siis kuvatakse alamfailis vastava bloki sisu. Alamfailides aga tuleb kasutada ainult neid blokke, mis põhifailis on defineeritud. Niisiis on meie näites faili baas.html sisu 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>

Teistes failides viitame esimesele, kirjutades algusesse {% extends 'baas.html' %}. Faili avaleht.html sisu võib olla näiteks järgnev:

{% extends 'baas.html' %}
{% block body %}
<h1>Avaleht</h1>
{% endblock %}

Selle näite puhul kuvatakse avaleht.html failis saki nimi Minu esimene veebileht ja lehe sisuosas pealkiri Avaleht. Kuna avaleht.html-failis head-blokki ei ole defineeritud, siis kasutatakse selle faili saki pealkirja, millele viidatakse (baas.html).

Jinja2 näide

Järgneva avaleht.html-faili näite puhul saki nime Minu esimene veebileht ei kuvata, kuna vastav blokk on selles failis defineeritud. Kui on kirjutatud uus pealkiri, siis kuvatakse seda. Kui aga blokk on defineeritud tühjana, siis pealkirja ei kuvata üldse.

{% extends 'baas.html' %}
{% block head %}
{% endblock %}

{% block body %}
<h1>Avaleht</h1>
{% endblock %}

Sarnaselt saame kõikide järgmiste failide puhul viidata baas.html failile ja kirjutada sisu sarnasel viisil, nagu tegime faili avaleht.html puhul. Failis app.py tuleb lisaks defineerida, millise aadressi puhul vastavat html-faili rakendatakse. See määrab, milliselt aadressilt me tulemust näeme. Näiteks @app.route('/') määrab, et saame arvutis tulemust vaadata aadressilt http://127.0.0.1:5000/. Kui aga kaldkriipsu järel on näiteks meist, siis näeb tulemust aadressilt http://127.0.0.1:5000/meist.

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('avaleht.html')

if __name__ == '__main__':
    app.run()

Ühes py-failis saab näidata ka mitme erineva faili puhul, milliselt aadressil sisu kuvatakse. Näiteks võib see osa py-failis olla selline:

@app.route('/')
def index():
    return render_template('avaleht.html')

@app.route('/meist')
def meist():
    return render_template('meist.html')

 

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Tarkvaraarendus. 2. trükk on loodud Eno Tõnisson, Tauno Palts, Kaarel Tõnisson, Heidi Meier, Merilin Säde, ja Säde Mai Krusberg jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut