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?

18voto

Lukas Bünger Punkte 181

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(']>');
}); 

API-Dokumentation.

16voto

nu everest Punkte 8467

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)

16voto

Indomitable Punkte 748

Sie könnten immer ng-bind anstelle von {{ }} verwenden http://docs.angularjs.org/api/ng/directive/ngBind

12voto

cat Punkte 2771

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

7voto

Thomas Orozco Punkte 50789

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.

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