Sjabloon
Finch gebruikt Jinja (de Python-sjabloonengine) voor het renderen van server-side HTML. Sjabloonbestanden bevinden zich in de map widgetsPath en hebben doorgaans de extensie .j2.html.
Een sjabloon renderen
Gebruik rq.renderView() in je controller:
return rq.renderView(
path: 'home/index', // Relatief aan widgetsPath, zonder extensie
params: {
'title': 'Startpagina',
'items': ['Appel', 'Banaan'],
},
);
Overzicht van Jinja-syntaxis
| Concept | Syntaxis |
|---|---|
| Variabele | {{ variable }} |
| Opmerking | {# Dit is een opmerking #} |
| Voorwaarde | {% if condition %} … {% endif %} |
| Lus | {% for item in list %} … {% endfor %} |
| Insluiten | {% include 'partial.j2.html' %} |
| Overerving | {% extends 'layout.j2.html' %} |
| Blok definiëren | {% block content %} … {% endblock %} |
| Blok invullen | {% block content %} … {% endblock %} |
| Filter | {{ value | upper }} |
| Commentaar | {# ... #} |
Voorbeeld: basissjabloon
{# lib/widgets/layout/base.j2.html #}
<!DOCTYPE html>
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
Voorbeeld: kindpagina
{# lib/widgets/home/index.j2.html #}
{% extends 'layout/base.j2.html' %}
{% block content %}
<h1>{{ title }}</h1>
{% for item in items %}
<p>{{ item }}</p>
{% endfor %}
{% endblock %}
Partials insluiten
{% include 'shared/navbar.j2.html' %}
Meegeleverde sjablonen
Finch levert een standaard layout. Je kunt dit overschrijven met je eigen sjablonen in widgetsPath.
Lokale events
Sjablonen kunnen Dart-events registreren die worden uitgevoerd vóór het renderen:
// In de controller:
rq.localEvents.add(MyEvent());
class MyEvent extends LocalEvent {
@override
Future<void> run(Request rq) async {
rq.addParam('currentUser', await UserModel().getCurrent(rq));
}
}
Lokale layout-filters
Voeg aangepaste Jinja-filters toe via rq.localLayoutFilters:
rq.localLayoutFilters['shorten'] = (value, args) {
return value.toString().substring(0, 50);
};
Gebruik in sjabloon:
{{ longText | shorten }}
Ingebouwde variabelen
Finch injecteert automatisch de volgende variabelen bij elke sjabloonrender:
| Variabele | Beschrijving |
|---|---|
$language |
Huidige taalcode ('en', 'nl', ...) |
$e |
Template-event-object met hulpmethoden |
$t |
Vertaalfunctie — {{ $t('key') }} |
$n |
Geneste navigatie |