HTML Academy · Oppitunti

Palvelinpuolen mallinnus: Jinja2 ja Handlebars

Käytä mallinnusmoottoreita HTML:n dynaamiseen renderöintiin palvelimella

Oppitunti 2/414 vaihetta

Palvelinpuolen mallinnus: Jinja2 ja Handlebars on ilmainen HTML Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu HTML Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. HTML Academy-kurssilla on yhteensä 4 oppituntia.

Miksi palvelinpuolen mallineita?

Palvelinpuolen mallineet tuottavat HTML:n palvelimella ennen sen lähettämistä selaimelle. Ne tarjoavat hakukoneystävällisen merkinnän heti ensimmäisessä vastauksessa, toimivat ilman JavaScriptiä ja välttävät puhtaasti asiakaspuolen renderöinnin "tyhjä sivu, kunnes JS latautuu" -ongelman.

Jinja2 (Python)

Jinja2 on Pythonin de facto -mallinekirjasto, jota käyttävät Flask, Django (sisäänrakennetun tai jinja2-taustajärjestelmän kautta), Pelican ja mkdocs. Logiikka kirjoitetaan {% %}-tunnisteisiin ja lausekkeet {{ }}-tunnisteisiin: muuttujille käytetään muotoa <h1>{{ title }}</h1> ja silmukoille muotoa {% for item in items %}.

<ul>
  {% for item in items %}
  <li>{{ item.name }} — ${{ item.price }}</li>
  {% endfor %}
</ul>

Handlebars (JavaScript)

Handlebars on käytetyin Node.js:n mallinekirjasto. Se on suosittu tapahtumasähköposteissa (SendGrid, Mailgun) ja SSR:ssä Expressin kautta. Lausekkeet kirjoitetaan {{ }}-tunnisteisiin ja lohkot {{# }}-tunnisteisiin: {{#each items}}<li>{{name}}</li>{{/each}}.

<ul>
  {{#each items}}
  <li>{{name}} — ${{price}}</li>
  {{/each}}
</ul>

Automaattinen escapointi

Molemmat moottorit escape-koodaavat muuttujien tulosteen oletusarvoisesti — {{ user.name }}, kun name = "<script>", tulostaa "&lt;script&gt;" ja neutraloi XSS-hyökkäyksen. Luottakaa aina automaattiseen escapointiin ja käyttäkää eksplisiittistä raw-suodatinta (Jinja: {{ x|safe }}, Handlebars: {{{x}}}) vain luotettuun HTML:ään.

Mallien perintä

Jinjassa: {% extends "base.html" %} lapsimallissa sekä {% block content %}{% endblock %} pohjamallissa. Handlebarsissa: {{#> layout }}{{/layout}} osamallilohkojen kanssa. Pohja-asettelu voi määrittää rakenteen kerran, ja sivut täyttävät muuttuvat alueet.

Sisällytykset ja osamallit

Jinjassa: {% include "header.html" %}. Handlebarsissa: {{> header}}. Molemmat upottavat toisen mallipohjan nykyiseen mallipohjaan. Osamallit ovat suurten komponenttikirjastojen rakennuspalikoita, joista kootaan sivuja ja asetteluja.

Suodattimet ja helperit

Jinjan suodattimet: {{ price|currency }}. Handlebarsin helperit: {{currency price}}. Molempien avulla arvoille voi kutsua muotoilufunktioita. Määrittele omia helpottajia projektikohtaisiin muunnoksiin, kuten päivämäärien muotoiluun, monikollistamiseen ja linkkien muodostamiseen.

Ehtolauseet

Jinjassa: {% if user.is_logged_in %}Welcome{% else %}Sign in{% endif %}. Handlebarsissa: {{#if user.isLoggedIn}}Welcome{{else}}Sign in{{/if}}. Mallipohjissa voi haarautua datan perusteella ilman, että sisältöä tarvitsee piilottaa tai näyttää asiakaspuolen JS:llä.

Suorituskyky

Molemmat moottorit esikääntävät mallipohjat funktioiksi ja kutsuvat näitä funktioita jokaisen pyynnön yhteydessä. Käännös tehdään kerran, ja renderöinti on nopeaa. Erittäin vilkkailla sivustoilla renderöity tulos kannattaa tallentaa välimuistiin reunalla (Varnish, Cloudflare) sen sijaan, että identtiset sivut renderöitäisiin uudelleen.

Lokalisointi

Yhdistä mallipohjat i18n-kirjastoihin: Pythonissa Jinja2 + Babel ja Nodessa Handlebars + i18next. Mallipohjat sisältävät käännösavaimia ({{ t "welcome" }}), ja i18n-kerros ratkaisee niiden vastineet oikealla kielellä. Näin yksi mallipohja voi tuottaa sisältöä monilla kielillä.

Kehysten mallipohjat

Modernit kehykset tuovat mukanaan omat mallipohjamuotonsa: ERB (Rails), Twig (Symfony), Blade (Laravel), Razor (.NET) sekä Slim/Haml (tiiviimpi syntaksi). Periaatteet ovat samat, mutta syntaksi vaihtelee. Valitkaa moottori, joka sopii taustajärjestelmän kieleen ja ekosysteemiin.

Siirtyminen komponentteihin

Mallipohjat toimivat erinomaisesti perinteisillä palvelimella renderöidyillä sivustoilla. Vuorovaikutteisemmissa sovelluksissa Next.js:n (React), Nuxtin (Vue) ja SvelteKitin kaltaiset kehykset hämärtävät rajaa: ne renderöivät mallipohjia palvelimella, mutta samat komponentit hydratoidaan asiakaspuolella vuorovaikutteisuutta varten.

Osaamisen tarkistus

Miksi automaattinen HTML-escaping on oletusarvoinen toiminta Jinja2:n ja Handlebarsin kaltaisissa mallipohjamoottoreissa?

Yhteenveto

Palvelinpuolen mallipohjamoottorit (Jinja2 Pythonille, Handlebars JS:lle sekä ERB/Twig/Blade muille teknologiapinoille) tuottavat HTML:ää palvelimella muuttujien, silmukoiden, ehtolauseiden, osamallien ja perinnän avulla. Automaattinen escaping suojaa oletusarvoisesti XSS-hyökkäyksiltä. Monikielisillä sivustoilla ne kannattaa yhdistää i18n-kirjastoihin. Mallipohjat ovat perusta, jonka päälle modernit kehykset lisäävät hydraation.

Aloita maksutta

Opi HTML tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”Palvelinpuolen mallinnus: Jinja2 ja Handlebars” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa HTML Academy-oppimispolun 3 oppituntia, myös oppitunnin “Palvelinpuolen mallinnus: Jinja2 ja Handlebars”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. HTML Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Palvelinpuolen mallinnus: Jinja2 ja Handlebars”?

Käytä mallinnusmoottoreita HTML:n dynaamiseen renderöintiin palvelimella Harjoittelet HTML Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni HTML Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin HTML Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Palvelinpuolen mallinnus: Jinja2 ja Handlebars”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä HTML Academy-oppitunnilla?

Kyllä. Jokainen HTML Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Komponenttien erottelu ja osamallit
  2. Palvelinpuolen mallinnus: Jinja2 ja Handlebars
  3. HTML suunnittelujärjestelmissä
  4. Dokumentoinnin ja tyyliohjeen integrointi
← Takaisin: HTML Academy