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 stimme dagegen, doppelte Klammern (()) als Vorlagen-Tag zu verwenden. Es funktioniert möglicherweise gut, solange kein Funktionsaufruf involviert ist, aber als ich es mit
ng:disabled=(($invalidWidgets.visible()))
mit Firefox (10.0.2) auf dem Mac versuchte, bekam ich einen schrecklich langen Fehler anstelle der beabsichtigten Logik. <[]> hat für mich gut funktioniert, zumindest bis jetzt.
Bearbeitung 2012-03-29: Bitte beachten Sie, dass $invalidWidgets veraltet ist. Dennoch würde ich immer noch eine andere Klammernverbindung als doppelte Klammern verwenden. Für jede Angular-Version höher als 0.10.7 (schätze ich) können Sie die Klammernverbindung viel einfacher in Ihrer App / Moduldefinition ändern:
angular.module('IhrAppName', [], function ($interpolateProvider) {
$interpolateProvider.startSymbol('<[');
$interpolateProvider.endSymbol(']>');
});
Ich fand den unten stehenden Code hilfreich. Ich habe den Code hier gefunden: http://djangosnippets.org/snippets/2787/
"""
filename: angularjs.py
Verwendung:
{% ng Einige.angular.scope.content %}
z.B.
{% load angularjs %}
{% ng deinName %}
"""
from django import template
register = template.Library()
class AngularJS(template.Node):
def __init__(self, bits):
self.ng = bits
def render(self, ctx):
return "{{%s}}" % " ".join(self.ng[1:])
def do_angular(parser, token):
bits = token.split_contents()
return AngularJS(bits)
register.tag('ng', do_angular)
Sie könnten immer ng-bind anstelle von {{ }} verwenden http://docs.angularjs.org/api/ng/directive/ngBind
Wenn Sie django 1.5 und neuer verwenden, verwenden Sie:
{% verbatim %}
{{if dying}}Immer noch am Leben.{{/if}}
{% endverbatim %}
Wenn Sie mit django 1.2 auf App Engine stecken, erweitern Sie die django-Syntax mit dem verbatim Template-Befehl wie folgt ...
from django import template
register = template.Library()
class VerbatimNode(template.Node):
def __init__(self, text):
self.text = text
def render(self, context):
return self.text
@register.tag
def verbatim(parser, token):
text = []
while 1:
token = parser.tokens.pop(0)
if token.contents == 'endverbatim':
break
if token.token_type == template.TOKEN_VAR:
text.append('{{')
elif token.token_type == template.TOKEN_BLOCK:
text.append('{%')
text.append(token.contents)
if token.token_type == template.TOKEN_VAR:
text.append('}}')
elif token.token_type == template.TOKEN_BLOCK:
text.append('%}')
return VerbatimNode(''.join(text))
In Ihrer Datei verwenden Sie:
from google.appengine.ext.webapp import template
template.register_template_library('utilities.verbatim_template_tag')
Quelle: http://bamboobig.blogspot.co.at/2011/09/notebook-using-jquery-templates-in.html
Sie können Django anweisen, {{
und }}
sowie andere reservierte Templates-Zeichen durch Verwendung des {% templatetag %}
Tags auszugeben.
Zum Beispiel würde die Verwendung von {% templatetag openvariable %}
{{
ausgeben.