kann current_user in jinja2-Makro nicht verwenden?

8

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:

%Vor%

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?

    
corvid 13.10.2014, 12:04
quelle

3 Antworten

13

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.

%Vor%     
davidism 13.10.2014, 15:31
quelle
1

Auf den current_user.is_authenticated wird jetzt als Eigenschaft zugegriffen, und der Aufruf der Methodendefinition führt zu Problemen mit aktuelleren Bibliotheksversionen.

Siehe: Ссылка

    
MrMesees 22.04.2016 08:51
quelle
0

UPDATE: Dies ist eine falsche Antwort gemäß den Anforderungen von OP.

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%     
Mehdi Sadeghi 13.10.2014 12:23
quelle

Tags und Links