306 Stimmen

AngularJS mit Django - Konflikte bei den Template-Tags

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?

3voto

silviud Punkte 965

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.

0voto

Dan Punkte 11288

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X