23

中かっこで囲まれた ID を生成する必要があります (例: "{1234}" )。django テンプレート言語では変数置換の開始にも中括弧が使用されるため、目的のものが得られないことがあります。私は試した

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

残念ながら、私が望むものではなく、「{1234}」を生成する最後の方法を除いて、これらの方法はどれも機能しません。現在、2 つの解決策があります。すでに {} を含む 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+"}"
4

3 に答える 3

30

あなたの答えはここにあると思います:

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

つまり、 と を使用{% templatetag openbrace %}{% templatetag closebrace %}ます。

編集:Djangoには、すぐに使えるこの機能も含まれるようになりました:

{% verbatim %} {{ blah blah }} {% endverbatim %}
于 2009-11-02T05:23:40.043 に答える
10

{% templatetag openbrace %}たとえば、javascript テンプレートの場合は非常に冗長になります

この要点verbatimのタグを使用して、まさにこの目的のためにある程度の成功を収めました。これにより、次のようなことができます

{{ 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 %}
于 2011-12-02T15:51:04.690 に答える