{"id":284,"date":"2020-12-22T16:07:38","date_gmt":"2020-12-22T16:07:38","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/?post_type=chapter&#038;p=284"},"modified":"2020-12-28T01:45:56","modified_gmt":"2020-12-28T01:45:56","slug":"jinja2","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/jinja2\/","title":{"raw":"Jinja2","rendered":"Jinja2"},"content":{"raw":"Selleks, et ei peaks iga html-faili tegema algusest, tuleb appi Jinja2 mallimootor, mis on Flaskiga kaasas.\r\n\r\nFaili, kus on html-struktuur (paneme meie n\u00e4ites selle faili nimeks baas.html), lisame n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% block head %} {% endblock %}<\/code> ja<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"> {% block body %} {% endblock %}<\/code>. Esimese lisame head-ossa ja teise body-ossa. Sellesse faili saame kirjutada need osad, mis on k\u00f5ikides html-failides samad. Kui sisu on n\u00e4iteks body-osas, aga blokist v\u00e4ljaspool, siis kuvatakse seda k\u00f5ikides failides, milles sellele failile viidatakse. Kui aga kirjutame selles p\u00f5hifailis midagi blokkide sisse, siis kuvatakse seda k\u00f5ikides 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\u00f5hifailis on defineeritud. Niisiis on meie n\u00e4ites faili baas.html sisu j\u00e4rgnev:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n{% block head %} &lt;title&gt;Minu esimene veebileht&lt;\/title&gt; {% endblock %}\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n{% block body %} {% endblock %}\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\r\nTeistes failides viitame esimesele, kirjutades algusesse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% extends 'baas.html' %}<\/code>. Faili avaleht.html sisu v\u00f5ib olla n\u00e4iteks j\u00e4rgnev:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">{% extends 'baas.html' %}\r\n{% block body %}\r\n&lt;h1&gt;Avaleht&lt;\/h1&gt;\r\n{% endblock %}<\/pre>\r\nSelle n\u00e4ite puhul kuvatakse avaleht.html failis saki nimi <em>Minu esimene veebileht<\/em> ja lehe sisuosas pealkiri<em> Avaleht<\/em>. Kuna avaleht.html-failis head-blokki ei ole defineeritud, siis kasutatakse selle faili saki pealkirja, millele viidatakse (baas.html).\r\n\r\n<img class=\"alignnone wp-image-352\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1.png\" alt=\"Jinja2 n\u00e4ide\" width=\"700\" height=\"242\" \/>\r\n\r\nJ\u00e4rgneva avaleht.html-faili n\u00e4ite puhul saki nime <em>Minu esimene veebileht<\/em> ei kuvata, kuna vastav blokk on selles failis defineeritud. Kui on kirjutatud uus pealkiri, siis kuvatakse seda. Kui aga blokk on defineeritud t\u00fchjana, siis pealkirja ei kuvata \u00fcldse.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">{% extends 'baas.html' %}\r\n{% block head %}\r\n{% endblock %}\r\n\r\n{% block body %}\r\n&lt;h1&gt;Avaleht&lt;\/h1&gt;\r\n{% endblock %}<\/pre>\r\nSarnaselt saame k\u00f5ikide j\u00e4rgmiste 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\u00e4\u00e4rab, milliselt aadressilt me tulemust n\u00e4eme. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@app.route('\/')<\/code> m\u00e4\u00e4rab, et saame arvutis tulemust vaadata aadressilt <a href=\"http:\/\/127.0.0.1:5000\/avaleht\/2\">http:\/\/127.0.0.1:5000\/<\/a>. Kui aga kaldkriipsu j\u00e4rel on n\u00e4iteks <em>meist<\/em>, siis n\u00e4eb tulemust aadressilt <a href=\"http:\/\/127.0.0.1:5000\/meist\">http:\/\/127.0.0.1:5000\/meist<\/a>.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">from flask import Flask, render_template\r\n\r\napp = Flask(__name__)\r\n\r\n@app.route('\/')\r\ndef index():\r\n    return render_template('avaleht.html')\r\n\r\nif __name__ == '__main__':\r\n    app.run()<\/pre>\r\n\u00dches py-failis saab n\u00e4idata ka mitme erineva faili puhul, milliselt aadressil sisu kuvatakse. N\u00e4iteks v\u00f5ib see osa py-failis olla selline:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">@app.route('\/')\r\ndef index():\r\n    return render_template('avaleht.html')\r\n\r\n@app.route('\/meist')\r\ndef meist():\r\n    return render_template('meist.html')<\/pre>\r\n&nbsp;","rendered":"<p>Selleks, et ei peaks iga html-faili tegema algusest, tuleb appi Jinja2 mallimootor, mis on Flaskiga kaasas.<\/p>\n<p>Faili, kus on html-struktuur (paneme meie n\u00e4ites selle faili nimeks baas.html), lisame n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% block head %} {% endblock %}<\/code> ja<code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"> {% block body %} {% endblock %}<\/code>. Esimese lisame head-ossa ja teise body-ossa. Sellesse faili saame kirjutada need osad, mis on k\u00f5ikides html-failides samad. Kui sisu on n\u00e4iteks body-osas, aga blokist v\u00e4ljaspool, siis kuvatakse seda k\u00f5ikides failides, milles sellele failile viidatakse. Kui aga kirjutame selles p\u00f5hifailis midagi blokkide sisse, siis kuvatakse seda k\u00f5ikides 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\u00f5hifailis on defineeritud. Niisiis on meie n\u00e4ites faili baas.html sisu j\u00e4rgnev:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">&lt;!DOCTYPE html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&lt;meta charset=\"UTF-8\"&gt;\r\n{% block head %} &lt;title&gt;Minu esimene veebileht&lt;\/title&gt; {% endblock %}\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n{% block body %} {% endblock %}\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Teistes failides viitame esimesele, kirjutades algusesse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">{% extends 'baas.html' %}<\/code>. Faili avaleht.html sisu v\u00f5ib olla n\u00e4iteks j\u00e4rgnev:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">{% extends 'baas.html' %}\r\n{% block body %}\r\n&lt;h1&gt;Avaleht&lt;\/h1&gt;\r\n{% endblock %}<\/pre>\n<p>Selle n\u00e4ite puhul kuvatakse avaleht.html failis saki nimi <em>Minu esimene veebileht<\/em> ja lehe sisuosas pealkiri<em> Avaleht<\/em>. Kuna avaleht.html-failis head-blokki ei ole defineeritud, siis kasutatakse selle faili saki pealkirja, millele viidatakse (baas.html).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-352\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1.png\" alt=\"Jinja2 n\u00e4ide\" width=\"700\" height=\"242\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1.png 717w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1-300x104.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1-65x22.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1-225x78.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-content\/uploads\/sites\/18\/2020\/12\/image1-350x121.png 350w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/p>\n<p>J\u00e4rgneva avaleht.html-faili n\u00e4ite puhul saki nime <em>Minu esimene veebileht<\/em> ei kuvata, kuna vastav blokk on selles failis defineeritud. Kui on kirjutatud uus pealkiri, siis kuvatakse seda. Kui aga blokk on defineeritud t\u00fchjana, siis pealkirja ei kuvata \u00fcldse.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">{% extends 'baas.html' %}\r\n{% block head %}\r\n{% endblock %}\r\n\r\n{% block body %}\r\n&lt;h1&gt;Avaleht&lt;\/h1&gt;\r\n{% endblock %}<\/pre>\n<p>Sarnaselt saame k\u00f5ikide j\u00e4rgmiste 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\u00e4\u00e4rab, milliselt aadressilt me tulemust n\u00e4eme. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">@app.route('\/')<\/code> m\u00e4\u00e4rab, et saame arvutis tulemust vaadata aadressilt <a href=\"http:\/\/127.0.0.1:5000\/avaleht\/2\">http:\/\/127.0.0.1:5000\/<\/a>. Kui aga kaldkriipsu j\u00e4rel on n\u00e4iteks <em>meist<\/em>, siis n\u00e4eb tulemust aadressilt <a href=\"http:\/\/127.0.0.1:5000\/meist\">http:\/\/127.0.0.1:5000\/meist<\/a>.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">from flask import Flask, render_template\r\n\r\napp = Flask(__name__)\r\n\r\n@app.route('\/')\r\ndef index():\r\n    return render_template('avaleht.html')\r\n\r\nif __name__ == '__main__':\r\n    app.run()<\/pre>\n<p>\u00dches py-failis saab n\u00e4idata ka mitme erineva faili puhul, milliselt aadressil sisu kuvatakse. N\u00e4iteks v\u00f5ib see osa py-failis olla selline:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"bootstrap4\" data-enlighter-linenumbers=\"false\">@app.route('\/')\r\ndef index():\r\n    return render_template('avaleht.html')\r\n\r\n@app.route('\/meist')\r\ndef meist():\r\n    return render_template('meist.html')<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"author":29,"menu_order":4,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-284","chapter","type-chapter","status-publish","hentry"],"part":100,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/29"}],"version-history":[{"count":6,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/284\/revisions"}],"predecessor-version":[{"id":447,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/284\/revisions\/447"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/100"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/284\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=284"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=284"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}