2009-11-02 14 views
21

Ich muss eine ID erzeugen, umgeben von geschweiften Klammern (zum Beispiel "{1234}"). Mit der Django-Vorlagensprache werden geschweifte Klammern auch verwendet, um eine Variablensubstitution zu starten, so dass ich Schwierigkeiten habe, zu erhalten, was ich will. Ich habe versucht,Wie geschweifte Klammern in Django-Vorlagen?

{{{ id }}} 
{{ '{'id'}' }} 
{{ '{'+id+'}' }} 
{ {{ id }} } 

Keine dieser Methoden arbeiten, mit Ausnahme des letzten, die leider produziert „{1234}“, nicht das, was ich will. Ich habe derzeit zwei Lösungen: Entweder übergebe ich eine ID-Variable, die bereits die {} (hässlich) enthält, oder ich schreibe einen benutzerdefinierten Filter und schreibe dann {{id | add_braces}} (bevorzuge es).

Bevor ich diesen Weg gehe, frage ich lieber, ob es eine bessere Lösung gibt.

Die Verwendung von Escape-Werten funktioniert nicht. Selbst wenn ich {% autoescape off%}% 7B {% endautoescape%} hinzufüge, bekomme ich das {nicht, was seltsam ist, aber das ist ein anderes Problem.

Dank

bearbeitet: Ich habe einen Schnellfilter schrieb. Es hier einfügen, damit jemand anders es als Vorlage für das Schreiben eines komplexeren verwenden kann. Zu setzen in Python-Paket APPLICATION_PATH/templatetags/formatting.py

from django import template 
from django.template.defaultfilters import stringfilter 

register = template.Library() 

@register.filter 
@stringfilter 
def add_braces(value): 
    return "{"+value+"}" 

Antwort

28

Ich denke, die Antwort ist hier zu finden:

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#templatetag

Kurz gesagt, wollen Sie {% templatetag openbrace %} und {% templatetag closebrace %} verwenden.

Edit: Django nun auch diese Funktionalität aus der Box:

{% verbatim %} {{ blah blah }} {% endverbatim %} 
+0

Danke! auf jeden Fall habe ich einen Filter geschrieben. Fügen Sie es hinzu, wenn jemand es als Beispiel für ein kleines Filter verwenden möchte ... –

10

{% templatetag openbrace %} extrem ausführliche werden für z.B. Javascript Vorlagen

Ich habe den verbatim Tag aus this gist mit einigem Erfolg für genau diesen Zweck verwendet, die Sie so etwas wie

{{ request.user }} 
{% verbatim %} 
    brackets inside here are left alone, which is handy for e.g. jquery templates 
    {{ this will be left }} 
    {% so will this %} 
{% endverbatim }} 

{% more regular tags (to be replaced by the django template engine %} 
+0

Das wortwörtliche Vorlagen-Tag ist jetzt Teil von django (1.5): https://docs.djangoproject.com/en/1.5/ref/templates/builtins/# wörtlich – stephendwolff

+0

Die akzeptierte Antwort auf diese Frage sollte wahrscheinlich geändert werden - wörtlich ist wirklich der richtige Weg, dies jetzt zu tun. – shacker

0

Die Empfehlung des Jinja Template-Sprache arbeitet mit dem Django Template-Engine tun kann auch :

http://jinja.pocoo.org/docs/dev/templates/#escaping

Die Lösung ist folgende:

{{ '{' }}{{ id }}{{ '}' }} 

Natürlich funktionieren die anderen zwei Antworten, aber dieses ist meiner Meinung nach weniger ausführlich und lesbarer.

+0

Für kleine wörtliche Werte ist dies eine gute Lösung. Für große Blöcke würde ich das Block-Tag '{% verbatim%}' verwenden. – Rebs

Verwandte Themen