Šablony Jinja nabízejí výkonný jazyk, který můžete použít k snadnému vytváření dynamických webových stránek.

Integrace Jinja s FastAPI vám umožní vytvářet dynamické webové stránky, které hladce spojují Python kód s HTML, což vám umožní oddělit prezentační vrstvu vaší aplikace od logiky vrstva. S dynamickými webovými stránkami můžete generovat personalizovaný obsah založený na datech, což zlepšuje uživatelský dojem.

Co je Jinja?

Jinja je robustní, na funkce bohatý šablonový engine pro Python, který generuje dynamické webové stránky. Jinja Templating podporuje dědičnost, podmíněné příkazy, smyčky a různé funkce, které zjednodušují vytváření dynamických webových stránek.

Můžete kombinovat FastAPI a Jinja a vytvářet webové stránky s konzistentním rozložením, které může zobrazovat data v reálném čase a zpracovávat vstupy uživatelů. Můžete také dosáhnout oddělení obav, díky čemuž bude váš kód lépe udržovatelný a srozumitelnější.

Nastavte projekt FastAPI

Chcete-li začít, budete muset nastavit projekt FastAPI.

instagram viewer
  1. Vytvořte a aktivujte virtuální prostředí pomocí těchto příkazů terminálu:
    python -m venv env

    # V systému Unix/MacOS:
    zdroj venv/bin/activate

    # V systému Windows:
    .\venv\Scripts\activate

  2. Nainstalujte FastAPI a požadované závislosti.
    pip install "fastapi[vše]"
  3. Vytvořte adresář projektu můj blog.
  4. Vytvořte soubor Python main.py ve vašem projektovém adresáři.
  5. Přidejte následující kód do main.py soubor:
    z fastapi import FastAPI

    fake_posts_db = [{
    'titul': 'První příspěvek na blogu',
    'obsah': 'Obsah prvního příspěvku na blogu.',
    'autor': 'John Doe',
    'datum publikace': '2023-06-20',
    'komentáře': [
    {'autor': 'Alice', 'obsah': "Skvělý příspěvek!"},
    {'autor': 'Bob', 'obsah': "Zajímavé čtení."}
    ],
    'postavení': 'publikováno'
    },{
    'titul': 'Druhý blogový příspěvek',
    'obsah': 'Obsah druhého příspěvku na blogu.',
    'autor': 'Jane Smith',
    'datum publikace': Žádný,
    'komentáře': [],
    'postavení': 'návrh'
    }]

    aplikace = FastAPI()

    @app.get("/about")
    defo():
    vrátit se„Vše, co potřebujete vědět o Simple Blog“

    Výše uvedený kód vytvoří jednoduchou aplikaci FastAPI s jedním koncovým bodem, který vrátí odpověď JSON, když k němu přistupujete přes odpovídající URL. Můžeš použít slovník Pythonu jako toto místo skutečné databáze; pomáhá snižovat složitost a zároveň se soustředit na primární cíl.
  6. Spusťte server.
    uvicorn main: app --reload

Návštěva http://localhost: 8000/asi ve vašem prohlížeči, abyste viděli odpověď serveru.

Integrace Jinja Templating

Po úspěšném nastavení projektu do něj nyní můžete přidat šablonu Jinja.

  1. V main.py soubor, importujte následující moduly:
    z fastapi.templating import Jinja2Templates
    z fastapi.staticfiles import Statické soubory
  2. Pod aplikace proměnnou, vytvořte instanci Jinja2Templates class a předejte adresář, který bude obsahovat vaše šablony.
    šablony = Jinja2Templates (adresář="šablony")
  3. Po šablony proměnnou, přidejte následující řádek kódu:
    app.mount("/statický", StaticFiles (adresář="statický"), jméno="statický")
    Výše uvedený kód připojuje statický adresář a instruuje FastAPI, aby obsluhovalo jakékoli statické soubory umístěné v adresáři, když adresa URL požadavku začíná /static.
  4. v můj blog adresář vytvořit dva adresáře, šablony pro uložení HTML souborů a statický který bude obsahovat všechny statické soubory.

Po dokončení těchto kroků jste úspěšně integrovali šablonu Jinja do svého projektu.

Vytváření dynamické webové stránky s Jinja

Jinja poskytuje bohatou sadu syntaxe a funkcí pro vytváření dynamických šablon.

V této části uvidíte, jak používat syntaxi šablon Jinja k vytváření dynamických webových stránek.

Značky šablony uzavřete s a kudrnatá ortéza a symbol procenta na obou stranách. Tyto značky můžete použít k provádění řídicích toků a logických operací v šabloně. Některé běžně používané značky šablon zahrnují:

  • Stav: Spustí blok kódu, pokud je podmínka pravdivá.
    {% -li podmínka %}...{% endif %}
  • Smyčka: Iteruje přes iterovatelnou a spustí blok kódu pro každou položku.
    {% pro položka v iterovatelné %}...{% endfor %}
  • Zahrnout: Zahrnuje další šablonu v rámci aktuální šablony.
    {% zahrnout 'název_šablony.html' %}
  • Blok: Definuje blok, který mohou podřízené šablony přepsat pomocí dědičnosti.
    {% block block_name %}...{% endblock %}
  • Rozšířit: Umožňuje podřízené šabloně zdědit a rozšířit nadřazenou šablonu.
    {% extend parent_temp.html %}

Tyto značky poskytují flexibilní a expresivní způsob generování obsahu HTML na základě dynamických dat a řízení logiky vaší aplikace.

Dědičnost šablony

Jinja Templating podporuje dědičnost šablony. To vám umožní definovat základní (nadřazenou) šablonu se společným rozložením a sekcemi, které může podřízená šablona rozšířit nebo přepsat. Podřízená šablona může používat Rozšířit tag zdědit a rozšířit nadřazenou šablonu.

Vytvořit základna.html soubor v šablony adresář s následujícím kódem.

html>
<html>
<hlava>
<titul>{% block title %}Jednoduchý blog{% endblock %}titul>
hlava>
<tělo>
<h1>{% block header %}Jednoduchý blog{% endblock %}h1>

{% block content %}
{% endblock %}

{% include "footer.html" %}
tělo>
html>

Tímto způsobem máte nadřazenou šablonu, která obsahuje společný kód pro všechny vaše šablony, což umožňuje podřízené šabloně ji zdědit a rozšířit podle potřeby.

V šablony vytvoření adresáře a zápatí.html soubor s následujícím kódem.

<zápatí>
<p>© Jednoduchý blog 2023. Všechna práva vyhrazena.p>
<Ahref="{{ url_for('about') }}">OA>
zápatí>

zápatí.html je přiložená šablona, ​​která obsahuje HTML kód pro sekci zápatí. Můžete ji znovu použít na více stránkách tak, že ji zahrnete do základní šablony pomocí Zahrnout štítek.

V šablony vytvoření adresáře a blog.html soubor s následujícím kódem.

{% extends "base.html" %}

{% block title %}Jednoduchý blog – stránka blogu{% endblock %}

{% block header %}Jednoduchý blog – stránka blogu{% endblock %}

{% block content %}
<h2>Celkový počet příspěvků: {{ příspěvky|délka }}h2>

{% za příspěvek v příspěvcích %}
<divtřída="pošta">

{% if post.status == 'publikováno' %}
<h3>{{ post.title }}h3>
<p>{{ post.content|zkrátit }}p>
<p>Publikováno dne: {{ post.publication_date }}p>

<h4>komentáře:h4>
<ul>
{% pro komentář v post.comments %}
<litřída="komentář">{{ comment.author }}-: {{ comment.content }}li>

{% endfor %}
ul>
{% else %}
<p>Tento příspěvek je stále v režimu konceptu.p>
{% endif %}
div>
<hr>
{% endfor %}
{% endblock %}

Tato podřízená šablona dědí z základna.html za použití Rozšířit štítek. Přepíše specifické bloky definované v základní šabloně, aby poskytl přizpůsobený obsah pro stránku blogu. Zahrnuje také nezbytnou logiku a iteraci pro zobrazení příspěvku a souvisejících komentářů.

Výrazy

Jinja podporuje širokou škálu výrazů, včetně aritmetických operací, porovnávání a logických operací. Například:

{{2 + 2}} // výstup: 4

Variabilní substituce

Chcete-li v šabloně vypsat proměnné, uzavřete je do dvojitých složených závorek. Například:

{{post.title}} // výstup: 'První příspěvek na blogu'

Filtry

Filtry upravují výstup proměnné. Za proměnnou můžete přidat jednu pomocí symbolu svislé čáry (|). Například:

{{post|length}} // výstup: 2

Do šablon můžete přidávat vložené komentáře a víceřádkové komentáře. Jinja bude tyto komentáře během vykreslování šablony ignorovat, takže jsou užitečné pro přidávání vysvětlení do šablony.

{# #} // v souladu

{% komentář %}... {% end comment %} // víceřádkový

URL

Abychom vám umožnili generovat správné hypertextové odkazy na jiné stránky v rámci aplikace, kontext šablony Jinja obsahuje a url_for funkce. Například:

<Ahref="{{ url_for('about') }}">OA>

Výše uvedený kód se stává http://localhost: 8000/asi. Uvidíte také, jak používat url_for k pozdějšímu získání statických cest k souborům.

To jsou jen některé ze základních aspektů syntaxe Jinja Templating. Jinja Templating poskytuje mnoho dalších funkcí a funkcí, jako jsou makra, kontext šablony a další, aby bylo vytváření šablon a jejich přizpůsobení efektivní a flexibilní.

Předávání dat do šablon

Nyní, když máte šablony připravené, musíte předat data z vašich koncových bodů FastAPI do šablon pro vykreslení.

Přidejte následující kód do main.py soubor:

z fastapi import FastAPI, Žádost
z fastapi.responses import HTMLResponse

@app.get("/", response_class=HTMLResponse)
asynchronnídefread_posts(žádost: žádost):
vrátit se šablony. TemplateResponse("blog.html", {"žádost": žádost,
"příspěvky": fake_posts_db})

Kód definuje koncový bod FastAPI, který zpracovává požadavek GET na kořenovou adresu URL ("/") a vrací HTMLResponse generované z blog.html šablona. Předává kontextový slovník obsahující aktuální objekt požadavku a fake_posts_db, do šablony. Tímto způsobem může Jinja vykreslovat přesná a dynamická data.

Návštěva http://localhost: 8000/ ve vašem prohlížeči a měli byste vidět něco takového:

Úspěšně jste předali data do šablon pro vykreslení.

Poskytování statických souborů

Kromě vykreslování dynamických šablon poskytuje FastAPI také funkce pro poskytování statických souborů, jako jsou soubory CSS, soubory JavaScript a obrázky.

Pomocí CSS vylepšíte vzhled a dojem ze stránky.

V statický adresář, vytvořte a styly.css soubor s následujícím kódem.

tělo {
rodina písem: Arial, sans-serif;
okraj: 0;
vycpávka: 20px;
barva pozadí: #f5f5f5;
}

h1, h2, h3, h4 {
barva: #333;
}

.pošta {
barva pozadí: #fff;
vycpávka: 20px;
okraj-dole: 20px;
hraniční poloměr: 5px;
box-shadow: 0 2px 4pxrgba(0, 0, 0, 0.1);
}

.poštah3 {
margin-top: 0;
}

.poštap {
okraj-dole: 10px;
}

.poštaul {
list-style-type: žádný;
polstrování-vlevo: 0;
}

.komentář {
okraj-dole: 10px;
vycpávka: 10px;
barva pozadí: #f9f9f9;
hraniční poloměr: 5px;
}

zápatí {
barva pozadí: #f2f2f2;
vycpávka: 10px;
zarovnání textu: centrum;
}

Upravte hlava prvek základna.html šablona takto:

<hlava>
<titul>{% block title %}Jednoduchý blog{% endblock %}titul>
<odkazhref="{{ url_for('static', path='/styles.css') }}"rel="stylesheet">
hlava>

Funkce url_for() generuje URL (cestu) pro styly.css (/static/styles.css) v souboru statický adresář, který je pak automaticky obsluhován FastAPI.

Návštěva http://localhost: 8000/ ve vašem prohlížeči.

Stejné postupy platí pro poskytování obrázků a souborů JavaScript.

Nezapomeňte dodržovat doporučené postupy

Při práci s Jinja Templating ve FastAPI je důležité dodržovat určité osvědčené postupy, abyste zajistili dobře organizovanou a efektivní kódovou základnu.

  • Uspořádejte šablony do vyhrazeného adresáře a zvažte použití podadresářů pro související šablony.
  • Využijte dědičnost šablon k vytvoření opakovaně použitelných základních šablon a rozšiřte je pro konkrétní obsah.
  • Pečlivě vybírejte data, která se mají předat šablonám, udržujte snadnou zátěž a pro běžně používaná data používejte kontextové procesory nebo middleware.
  • Využijte funkce Jinja Templating, jako jsou makra, filtry a řídicí struktury pro lepší znovupoužitelnost a čitelnost kódu.
  • Optimalizujte výkon implementací strategií ukládání do mezipaměti pro statické šablony, používání hlaviček mezipaměti HTTP a profilování pro omezení výkonu.

Dodržováním těchto osvědčených postupů můžete udržovat strukturovaný projekt, optimalizovat výkon vykreslování a efektivně využívat funkce Jinja Templating ve vašich aplikacích FastAPI.

Použití FastAPI pro vytváření RestAPI

Kromě vytváření aplikací, které vyžadují vykreslovací šablony. FastAPI vyniká při vytváření RestAPI díky svému vysokému výkonu, snadno použitelné syntaxi, automatickému generování dokumentace a škálovatelnosti. Díky těmto funkcím je FastAPI ideální pro efektivní vývoj robustních webových API.