Add substantial content to README.md

This commit is contained in:
Florian Heß 2025-05-15 20:47:15 +02:00
parent c1ce35a44c
commit c983f44fed

View File

@ -1,3 +1,76 @@
# flask-website
Website auf Jinja2-Basis
=========================
Die Website auf Mason2-Basis (bzw. Mason1 auf der digi-Instanz) soll durch eine
Eigenimplementierung auf Jinja2 migriert werden.
Jinja2 läuft auf Django- oder auf Flask-Basis. Wir bevorzugen Flask, da wir
mutmaßlich keine Datenbank brauchen werden, worauf das mächtigere Django
stark ausgerichtet ist. Flask ist in der Beziehung leichtgewichtiger.
`flask`
-----------
Unser auf Jinja2-basierter Application Server mit flask.
`templates` und Layoutkaskaden
----------------------------------
`**/layout.jtml` heißen die kaskadenartig angewendeten Layoutdateien. Wird eine normale Seite mit der
Dateinamensendung `.html` aufgerufen, wird zunächst versucht, eine Datei namens `layout.jtml` aus dem
gleichen Verzeichnis zu laden. Schlägt dies fehl, wird die Suche auf der nächsthöheren Verzeichnisebene
fortgesetzt, und so weiter. Das gleiche geschieht, wenn für eine `layout.jtml` wiederum die nächsthöhere
gefunden werden soll, aber nur solange jeweils die erste Zeile darin lautet:
{% extends layout() %}
Anstelle von `layout()` kann auch der Dateipfad von einem beliebigen anderen Template stehen.
Dieses wird dann verwendet. Enthält es aber selbst wiederum `{% extends layout() %}`, wird zu derselben
Kaskade zurückgekehrt, als würde es in der eigentlich aufgerufenen Seite stehen.
Jedwedes direkt angegebene Template außer `layout()` schiebt sich gewissermaßen zwischen
die aufgerufene Seite und die weitere, normale Layoutkaskade.
`DSL.*`
-------
Jinja2-Migrationen der Mason-Snippets (`<& /nav1/img, name => "neu" &>`) sind aufrufbar wie folgt:
`{{ DSL.img(name="neu") }}`
Sprachinfix
-----------
Der Dateiendung der aufgerufenen Seite kann ein `de.`, `en.`, `fr.` oder `it.` vorangehen. Weitere
Sprachen können jederzeit hinzugefügt werden. Da es aber auch Top-Level-Verzeichnisse mit zwei
Buchstaben langen Namen geben kann (z.B. `nc/`), werden nur registrierte Sprachkürzel nach dieser
Logik berücksichtigt.
Erscheint in der URL als erstes Pfadsegment nach der Domain ein Sprachinfix (statt "en" geht
auch "Englisch/", "English", groß oder klein geschrieben), so wird bevorzugt die
entsprechende Fassung aufgerufen.
Alternativ, sollte die angefragte Fassung der Seite nicht gefunden werden, wird die englische bzw. die
deutsche Fassung genommen.
Aufrufe der Funktion `DSL.i18n(de="Text in deutscher Sprache", en="...", ...)` lösen sich entsprechend
der gefundenen Fassung auf, wenn der Textstring in der angefragten Sprache nicht verfügbar ist. Danach
wird die englische, dann die deutsche Fassung probiert.
Gleiches gilt für `DSL.i18n` im Filtermodus: `{% filter DSL.i18n %}...{% endfilter %}` kann immer dann
benutzt werden, wenn für unterschiedliche Sprachen verschiedene HTML-Markups verwendet werden sollen. Alle
von diesem Filter umfassten Inhalte werden gefiltert nach Elementen mit lang-Attribut. Nur diejenigen
dieser Elemente, die auf die angefragte bzw. gefundene Sprachfassung passen, werden samt Inhalt angezeigt.
Markdown
--------
Es wird ein Filter `markdown` definiert. In der Layout-Datei kann man diesen wie folgt nutzen:
{% filter markdown %}
{% block content %}Diese Seite hat keinen Inhalt, denn es ist nur die layout.jtml-Datei.{% endblock %}
{% endfilter %}
Application Gateway uwsgi, Application Webserver flask und Template Engine jinja2 konfiguriert und programmiert.