Program Tip

Django 템플릿에서 {{또는}}을 이스케이프하는 방법은 무엇입니까?

programtip 2020. 12. 9. 21:36
반응형

Django 템플릿에서 {{또는}}을 이스케이프하는 방법은 무엇입니까?


Django는 {{ var }}템플릿에서 일부 변수로 취급합니다 . 나는 벗어날 수있는 방법 {{ var }}이나 {{또는 }}장고 변수로 취급하지 않도록.

<p>"{{ some text }}"</p> 정확히 동일하게 인쇄해야합니다.


templatetag템플릿 태그를 찾고 있다고 생각합니다 .

링크 된 문서에 따르면

템플릿 시스템에는 "이스케이프"개념이 없으므로 템플릿 태그에 사용 된 비트 중 하나를 표시하려면 {% templatetag %}태그 를 사용해야합니다 .

예를 들면 :

<p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p>

다음과 같이 나타납니다.

<p>"{{ some text }}"</p>

Django 1.5는 {% verbatim %}템플릿 태그를 도입했습니다 . 템플릿이이 태그의 내용을 구문 분석하는 것을 중지합니다.

{% verbatim %}
    {{ var }}
{% endverbatim %}

다음과 같이 렌더링됩니다.

{{ var }}

편집 : 매우 깨끗하지 않기 때문에 이것을 권장하지는 않지만 여전히 옵션입니다.

나는 JQuery Templates와 함께 사용할 수있는 것을 찾고 있었고 태그 나 필터없이 그것을 할 수있는 방법을 찾았다. 이것은 내가 얻을 수있는 한 짧습니다.

{{ "{{ any text }" }}}

다음과 같이 인쇄됩니다.

{{ any text }}

왜 작동합니까? 행에 두 개의 닫는 중괄호}}가없는 한 {{}} 내의 모든 텍스트는있는 그대로 표시됩니다. 그런 다음 연속으로 세 개의 괄호가 있습니다. django는 첫 번째 두 개를 변수의 끝으로 해석하여 하나의 추가 닫는 중괄호를 남깁니다.


다음과 같은 html 문자 이스케이프를 사용하여 이스케이프를 시도 할 수 있습니다.

{= &#123;

} = &#125;

<p>"&#123;&#123; some text &#125;&#125;"</p>

브라우저 내에서 시도해보십시오.


angularjs와 같은 템플릿 프레임 워크의 변수로 {{}}를 사용하기 만하면 다음과 같이 할 수 있습니다.

<app path>/templatetags/ngvar.py추가

from django import template
register = template.Library()

@register.simple_tag
def ngvar(var_name):
    return "{{%s}}" % var_name

템플릿에서

{% load ngvar %}
{% ngvar "variable name" %}

ngvar.py가 첫 번째 템플릿 태그 인 __init__.py경우 templatetags디렉토리 파일을 추가해야합니다.


위의 답변으로 원래 문제를 해결할 수 있지만 나처럼 머리를 긁는 사람들을 위해 여기에 몇 가지 해킹을 추가합니다.

때때로 우리는 하나의 중괄호 뒤에 변수를 렌더링하려고합니다. 예를 들어 BibTeX에는 다음과 같은 내용이있을 수 있습니다.

@MISC{hu2012-spectral,
    author = {Hu, Pili},
    title = {Spectral Clustering Survey},
    howpublished = {GitHub, https://github.com/hupili/tutorial/tree/master/spectral-clustering},
    month = {May},
    year = {2012}
}

이러한 bib 필드는 템플릿 변수에서 가져옵니다. 당신이 쓰면

title = {{{title}}},

jinja는 컴파일 할 수없고 오류가 발생합니다. 당신이 쓰면

title = { {{title}} },

추가 공백이 있습니다. 해킹은 '{'및 '}'를 변수로 저장하고 나중에 사용하는 것입니다.

{% set lb = '{' %}
{% set rb = '}' %}
...
@MISC{{lb}}{{ meta.bib_key }},
    author = {{lb}}Hu, Pili{{rb}},
    title = {{lb}}{{ meta.title }}{{rb}},
    howpublished = {{lb}}GitHub, https://github.com/hupili/tutorial/tree/master/{{ auto.path}}{{rb}},
    month = {{lb}}{{ meta.month }}{{rb}},
    year = {{lb}}{{ meta.year }}{{rb}}
}

어색해 보이지만 지금까지 찾은 것이 최고입니다. 더 깨끗한 솔루션이 있으면 알려주세요.


또 다른 옵션은 각 중괄호 사이에 단어 결합 자 (폭이없는 공백 없음) 를 추가하는 것입니다 .

<p>"{&#8288;{ some text }&#8288;}"</p>

This template tag (designed for use with jQuery Templates) might do the trick. It let's you wrap content you don't want Django to interpret as variables with a template tag.


Jinja, which is what is being used for the templates, offers several suggestions for escaping here. What has worked best for me is using something like "{% raw %}{{ some text }}{% endraw %}"


it can be solved by avoing adjacent angular backets, if its inside javascript code then you can write

'{'+'{address.'+key+'}}'

I used this to print jinja variables into another template,using javascript.

참고URL : https://stackoverflow.com/questions/7772001/how-to-escape-or-in-django-template

반응형