2009-11-02 7 views
21

Je dois produire un identifiant entouré d'accolades (par exemple "{1234}"). Avec le langage de modèle django, les accolades sont également utilisées pour démarrer une substitution de variable, donc j'ai du mal à obtenir ce que je veux. J'ai essayéComment mettre des accolades dans les modèles django?

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

Aucune de ces méthodes de travail, à l'exception du dernier, qui produit malheureusement « {1234} », pas ce que je veux. J'ai actuellement deux solutions: soit je passe une variable d'id contenant déjà le {} (laid) ou j'écris un filtre personnalisé et puis j'écris {{id | add_braces}} (je le préfère).

Avant de passer par là, je préfère demander si une meilleure solution existe. L'utilisation de valeurs échappées ne fonctionne pas. Même si j'ajoute {% autoescape off%}% 7B {% endautoescape%} je n'obtiens pas le {, ce qui est étrange, mais c'est un autre problème.

Merci

Modifier: J'ai écrit un filtre rapide. Coller ici afin que quelqu'un d'autre puisse l'utiliser comme un modèle pour écrire un plus complexe. Pour être mis en paquet python 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+"}" 

Répondre

28

Je pense que votre réponse se trouve ici:

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

En bref, vous voulez utiliser {% templatetag openbrace %} et {% templatetag closebrace %}.

Edit: Django inclut désormais également cette fonctionnalité de la boîte:

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

Merci! en tout cas j'ai écrit un filtre. Ajoutant ainsi si quelqu'un veut l'utiliser comme un petit exemple de filtre ... –

10

{% templatetag openbrace %} deviennent extrêmement verbeux pour exemple modèles javascript

Je l'ai utilisé la balise verbatim de this gist avec un certain succès dans ce but précis qui vous permet de faire quelque chose comme

{{ 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

la balise verbatim template fait maintenant partie de django (1.5): https://docs.djangoproject.com/fr/1.5/ref/templates/builtins/# verbatim – stephendwolff

+0

La réponse acceptée sur cette question devrait probablement être changée - verbatim est vraiment la bonne façon de le faire maintenant. – shacker

0

La recommandation de la langue templating Jinja fonctionne avec le moteur templating Django et :

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

La solution est la suivante:

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

Bien sûr, les deux autres réponses fonctionnent, mais celle-ci est moins verbeuse et plus lisible, à mon avis.

+0

Pour les petites valeurs textuelles, c'est une bonne solution. Pour les gros blocs, j'irais avec la balise de bloc '{% verbatim%}'. – Rebs

Questions connexes