Ich benutze Flask-Login, welches das Objekt current_user
in Vorlagen zur Verfügung stellt. Ich möchte ein Makro schreiben, um ein Kommentarformular oder einen Login-Link anzuzeigen, abhängig davon, ob der Benutzer angemeldet ist. Wenn ich diesen Code direkt in der Vorlage verwende, funktioniert es:
Ich habe denselben Code in ein Makro eingefügt und das Makro in meine Vorlage importiert.
%Vor% %Vor%Beim Versuch, diese Seite zu laden, lautet der Fehler:
%Vor% Natürlich ist die einfache Lösung, current_user
als Parameter zu übergeben und das zu verwenden (indem man die Signatur comment_form(user, form)
macht), obwohl dies eine ziemlich hässliche Lösung (imo) ist.
Warum verwendet das Makro den Kontextprozessor nicht? Enthält es nicht den Kontext?
Der Kontext, in dem eine Vorlage gerendert wird, wird nicht an Importe übergeben, wenn Sie nicht dazu aufgefordert werden. Weitere Informationen finden Sie in den relevanten Dokumenten .
Sie haben Recht, Sie müssen keinen Kontext als Argumente in Makros einfügen. Sie können die Makros with context
importieren und haben Zugriff auf den Kontext der Vorlage, in die sie importiert werden.
Laut jinja2 docs ist nicht jede Variable in jinja2-Makros verfügbar. Ändere dein Makro und sende 'current_user' als Parameter an es:
%Vor%und so wirst du es benutzen:
%Vor%