Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to put braces in django templates?

Tags:

I need to produce an id surrounded by braces ( for example "{1234}" ). With the django template language, braces are also used to start a variable substitution, so I have some trouble in obtaining what I want. I tried

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

None of these methods work, except the last one, which unfortunately produces "{ 1234 }", not what I want. I currently have two solutions : either I pass an id variable already containing the {} (ugly) or I write a custom filter and then write {{ id|add_braces }} (I prefer it).

Before going this way, I prefer to ask if a better solution exists.

Using escaped values does not work. Even if I add {% autoescape off %}%7B{% endautoescape %} I don't get the {, which is strange, but that's another problem.

Thanks

Edit: I wrote a quick filter. Pasting it here so someone else can use it as a template for writing a more complex one. To be put into python package 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+"}" 
like image 356
Stefano Borini Avatar asked Nov 02 '09 05:11

Stefano Borini


People also ask

What does {{ NAME }} this mean in Django templates?

What does {{ name }} this mean in Django Templates? {{ name }} will be the output. It will be displayed as name in HTML. The name will be replaced with values of Python variable.

How do I add a template to Django?

To configure the Django template system, go to the settings.py file and update the DIRS to the path of the templates folder. Generally, the templates folder is created and kept in the sample directory where manage.py lives. This templates folder contains all the templates you will create in different Django Apps.

What does {% include %} do in Django?

From the documentation: {% extends variable %} uses the value of variable. If the variable evaluates to a string, Django will use that string as the name of the parent template. If the variable evaluates to a Template object, Django will use that object as the parent template.

What is Django template filter?

Django Template Engine provides filters which are used to transform the values of variables;es and tag arguments. We have already discussed major Django Template Tags. Tags can't modify value of a variable whereas filters can be used for incrementing value of a variable or modifying it to one's own need.


2 Answers

I think your answer can be found here:

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

In short, you want to use {% templatetag openbrace %} and {% templatetag closebrace %}.

Edit: Django now also includes this functionality out of the box:

{% verbatim %} {{ blah blah }} {% endverbatim %} 
like image 108
Paul McMillan Avatar answered Sep 28 '22 09:09

Paul McMillan


{% templatetag openbrace %} become extremely verbose for e.g. javascript templates

I've used the verbatim tag from this gist with some success for exactly this purpose which lets you do something like

{{ 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 %} 
like image 32
second Avatar answered Sep 28 '22 10:09

second