if..else benutzerdefinierte Template-Tag

8

Ich implementiere eine benutzerdefinierte Berechtigungs-Anwendung in meinem Django-Projekt, und ich bin verloren, wie ein benutzerdefiniertes Template-Tag implementiert wird, das die Berechtigungen eines angemeldeten Benutzers für eine bestimmte Objektinstanz überprüft und ein Stück HTML basierend darauf anzeigt das Ergebnis der Überprüfung.

Was ich jetzt habe ist (Pseudocode):

%Vor%

('check_permission' ist mein benutzerdefiniertes Vorlagen-Tag).

Der TemplateTag nimmt den Benutzer, die Berechtigung und die Objektinstanz auf und gibt das beiliegende HTML (das Formular) zurück. Dies funktioniert derzeit gut.

Was ich jedoch gerne machen würde, ist etwas wie:

%Vor%

Ich habe über das Zuordnungstag gelesen, aber Meine Befürchtung ist, dass ich den Kontextvariablenraum damit verschmutzen würde (was bedeutet, dass ich vorherige Berechtigungskontextvariablen überschreiben könnte). Mit anderen Worten, wenn die Kontextvariablen auf verschiedenen Ebenen definiert werden (die Ansicht, Middleware in meinem Fall und jetzt dieses Zuordnungsvorlagen-Tag), mache ich mir Sorgen um die Wartbarkeit.

    
LaundroMat 17.10.2011, 09:05
quelle

2 Antworten

13

Sie können Vorlagenfilter in if-Anweisungen verwenden. So könnten Sie Ihr Tag als Filter umschreiben:

%Vor%

Beachten Sie, dass es schwierig ist, mehrere Argumente unterschiedlichen Typs an einen Filter zu übergeben. Daher möchten Sie wahrscheinlich einen Filter pro Berechtigung verwenden, oben habe ich check_can_edit verwendet.

    
Daniel Roseman 17.10.2011, 09:31
quelle
12

Sie können das auf jeden Fall tun, wenn Sie bereit sind, weitere Zeilen mit Python-Code zu schreiben, um die Lesbarkeit Ihrer Vorlage zu verbessern! :)

Sie müssen den Tag-Inhalt selbst analysieren, sogar die Parameter, die er benötigt, und sie dann auflösen, wenn Sie Variablen dafür verwenden wollen.

Das unten implementierte Tag kann folgendermaßen verwendet werden:

%Vor%

Oder mit einer Variablen:

%Vor%

Also, hier ist die Art, wie ich es gemacht habe:

%Vor%

Und das ist es. HTH.

    
clarete 10.01.2013 01:27
quelle

Tags und Links