Ich möchte AngularJS mit Django verwenden, aber beide verwenden sie {{ }}
als Vorlagen-Tags. Gibt es eine einfache Möglichkeit, eines der beiden zu ändern, um ein anderes benutzerdefiniertes Vorlagen-Tag zu verwenden?
javascript
django
django-templates
angularjs
Endophage
quelle
quelle
templates
Verzeichnis, den Rest habe ich eingegebenstatic
. Auf diese Weise haben Sie keine Störungen. Es gibt ein Tutorial, das ich hier geschrieben habe: coderwall.com/p/bzjuka/…Antworten:
Für Angular 1.0 sollten Sie die Interpolationssymbole mit dem API $ interpolateProvider konfigurieren: http://docs.angularjs.org/api/ng.$interpolateProvider .
So etwas sollte den Trick machen:
Beachten Sie zwei Dinge:
{{ }}
in ihren Vorlagen verwendet werden, werden diese durch Ihre Konfiguration beschädigt. ( Fix ausstehend )Wir können zwar nichts gegen das erste Problem tun, außer Menschen zu warnen, aber wir müssen das zweite Problem angehen.
quelle
$interpolateProvider.startSymbol('{[{').endSymbol('}]}');
Sie können vielleicht versuchen, wörtlich Django Template Tag und verwenden Sie es wie folgt:
quelle
Wenn Sie Seitenabschnitte ordnungsgemäß getrennt haben, können Sie AngularJS-Tags problemlos im Bereich "Raw" -Tags verwenden.
In jinja2
In der Django-Vorlage (über 1.5)
quelle
Wir haben in Django 'ng' einen sehr einfachen Filter erstellt , der es einfach macht, beide zu mischen:
foo.html:
Der
ng
Filter sieht folgendermaßen aus:quelle
Deshalb habe ich heute im Angular IRC-Kanal große Hilfe bekommen. Es stellt sich heraus, dass Sie Angulars Vorlagen-Tags sehr einfach ändern können. Die erforderlichen Snippets unten sollten nach Ihrem eckigen Include enthalten sein (das angegebene Beispiel wird in den Mailinglisten angezeigt und
(())
als neue Vorlagen-Tags verwendet, die Ihre eigenen ersetzen):Außerdem wurde ich auf eine bevorstehende Verbesserung hingewiesen, die verfügbar macht,
startSymbol
undendSymbol
Eigenschaften, die auf beliebige Tags eingestellt werden können.quelle
Ich stimme gegen die Verwendung von doppelten Klammern (()) als Vorlagen-Tag. Es kann gut funktionieren, solange kein Funktionsaufruf beteiligt ist, aber wenn Folgendes versucht wird
Mit Firefox (10.0.2) auf dem Mac habe ich einen furchtbar langen Fehler anstelle der beabsichtigten Logik erhalten. <[]> ist mir zumindest bis jetzt gut gegangen.
Edit 2012-03-29: Bitte beachten Sie, dass $ invalidWidgets veraltet ist. Ich würde jedoch immer noch einen anderen Wrapper als Doppelklammern verwenden. Für jede Winkelversion höher als 0.10.7 (ich denke) können Sie den Wrapper in Ihrer App / Modul-Definition viel einfacher ändern:
API-Dokumente .
quelle
(())
. Ich wollte nur die Trennzeichen konfigurieren können.Ich fand den folgenden Code hilfreich. Ich habe den Code hier gefunden: http://djangosnippets.org/snippets/2787/
quelle
<p>{% ng location %}</p>
Es wird gerendert als{{location}}
- ja mit geschweiften Klammern! Der Wert von $ scope.location, der in meinem Controller fest codiert ist, wird nicht gerendert. Irgendeine Idee, was ich vermisse?Sie können jederzeit ng-bind anstelle von {{}} http://docs.angularjs.org/api/ng/directive/ngBind verwenden
quelle
Wenn Sie Django 1.5 und höher verwenden, verwenden Sie:
Wenn Sie mit Django 1.2 auf Appengine nicht weiterkommen, erweitern Sie die Django-Syntax mit dem Befehl wörtliche Vorlage wie folgt ...
Verwenden Sie in Ihrer Datei:
Quelle: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
quelle
from django import template
in:from google.appengine._internal.django import template
Dann, in meiner Hauptdatei, ändern Sie einfach den Dateinamen:template.register_template_library('utilities.verbatim_template_tag')
Mit dem Tag können Sie Django anweisen,
{{
und}}
andere reservierte Vorlagenzeichenfolgen auszugeben{% templatetag %}
.Zum Beispiel
{% templatetag openvariable %}
würde using ausgeben{{
.quelle
Ich würde mich an eine Lösung halten, die sowohl Django-Tags {{}} als auch Angularjs {{}} mit einem wörtlichen Abschnitt oder einem Templatetag verwendet.
Das liegt einfach daran, dass Sie die Funktionsweise von anglejs (wie erwähnt) über $ interpolateProvider.startSymbol $ interpolateProvider.endSymbol ändern können. Wenn Sie jedoch andere angularjs-Komponenten wie den UI-Bootstrap verwenden, werden Sie feststellen, dass einige der Vorlagen BEREITS erstellt wurden mit Standard-Angularjs-Tags {{}}.
Schauen Sie sich zum Beispiel https://github.com/angular-ui/bootstrap/blob/master/template/dialog/message.html an .
quelle
Wenn Sie eine serverseitige Interpolation durchführen, ist der einzig richtige Weg, dies zu tun
<>
Alles andere ist ein XSS-Vektor.
Dies liegt daran, dass alle Winkelbegrenzer, die nicht von Django maskiert werden, vom Benutzer in die interpolierte Zeichenfolge eingegeben werden können. Wenn jemand seinen Benutzernamen auf "{{evil_code}}" setzt, führt Angular ihn gerne aus . Wenn Sie einen Charakter verwenden, dem Django entkommt , wird dies jedoch nicht passieren.
quelle