Ich möchte AngularJS mit Django verwenden, jedoch verwenden beide {{ }}
als ihre Vorlagetags. Gibt es einen einfachen Weg, um einen der beiden zu ändern, damit er ein anderes benutzerdefiniertes Vorlagetag verwendet?
Antworten
Zu viele Anzeigen?Ich würde bei einer Lösung bleiben, die sowohl django-Tags {{}} als auch angularjs {{}} mit einem Verbatim-Abschnitt oder templatetag verwendet.
Das liegt einfach daran, dass Sie die Art und Weise ändern können, wie angularjs funktioniert (wie erwähnt) über die $interpolateProvider.startSymbol $interpolateProvider.endSymbol, aber wenn Sie anfangen, andere Angularjs-Komponenten wie das ui-bootstrap zu verwenden, werden Sie feststellen, dass einige der Vorlagen bereits mit Standard-Angularjs-Tags {{}} erstellt wurden.
Zum Beispiel schauen Sie sich https://github.com/angular-ui/bootstrap/blob/master/template/dialog/message.html an.
Wenn Sie eine Server-seitige Interpolation durchführen, ist der einzige korrekte Weg dies mit <>
zu tun.
$interpolateProvider.startSymbol('<{').endSymbol('}>');
Alles andere ist ein XSS-Vektor.
Dies liegt daran, dass alle Angular-Trennzeichen, die von Django nicht maskiert werden, vom Benutzer in den interpolierten String eingegeben werden können; wenn jemand seinen Benutzernamen als "{{evil_code}}" setzt, wird Angular es gerne ausführen. Wenn Sie ein Zeichen verwenden, das Django maskiert, wird dies jedoch nicht passieren.
- See previous answers
- Weitere Antworten anzeigen