2009-11-02 59 views
21

我需要生成一個由大括號包圍的ID(例如「{1234}」)。使用django模板語言,大括號也用於啓動變量替換,因此在獲取我想要的內容時遇到了一些麻煩。我試圖如何在django模板中添加大括號?

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

這些方法都沒有工作,除了最後一個,不幸的是生產「{} 1234」,不是我想要的。我目前有兩種解決方案:要麼傳遞已包含{}(醜陋)的id變量,要麼編寫自定義過濾器,然後編寫{{id | add_braces}}(我更喜歡它)。

在這樣做之前,我更喜歡問是否存在更好的解決方案。

使用轉義值不起作用。即使我添加{%autoescape off%}%7B {%endautoescape%}我沒有得到{,這很奇怪,但那是另一個問題。

感謝

編輯:我寫了一個快速過濾器。在此處粘貼,以便其他人可以將其用作編寫更復雜文檔的模板。擬投入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+"}" 

回答

28

,我認爲你的答案可以在這裏找到:

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

總之,要使用{% templatetag openbrace %}{% templatetag closebrace %}

編輯: 的Django現在還包括這個功能開箱:

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

謝謝!無論如何,我寫了一個過濾器。添加它,如果有人想用它作爲一個小的過濾器的例子... – 2009-11-02 05:30:44

10

{% templatetag openbrace %}成爲例如非常詳細JavaScript的模板

我用verbatim標籤從this gist取得了一些成功出於這樣的目的,它可以讓你做這樣的事情

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

現在的verbatim模板標籤是django(1.5)的一部分:https://docs.djangoproject.com/en/1.5/ref/templates/builtins /#verbatim – stephendwolff 2013-06-30 20:29:38

+0

對這個問題的接受答案可能應該改變 - 逐字逐句確實是現在這樣做的正確方法。 – shacker 2014-04-23 23:20:42

0

從神社模板語言的建議與Django的模板引擎的工作原理,以及:

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

解決的辦法是這樣的:

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

當然,其他兩個答案的工作,但這是一個不太詳細和更可讀,在我看來。

+0

對於小的逐字值,這是一個很好的解決方案。對於大塊,我會使用'{%verbatim%}'塊標籤。 – Rebs 2015-11-10 05:44:38