Django рассматривает {{ var }}
как некоторую переменную в своем шаблоне. Как я могу избежать {{ var }}
или {{
или }}
, чтобы django не рассматривал его как переменную.
<p>"{{ some text }}"</p>
Должен печатать точно то же самое.
Django рассматривает {{ var }}
как некоторую переменную в своем шаблоне. Как я могу избежать {{ var }}
или {{
или }}
, чтобы django не рассматривал его как переменную.
<p>"{{ some text }}"</p>
Должен печатать точно то же самое.
Я считаю, что вы ищете тег templatetag
.
В качестве состояний, связанных с doc,
Поскольку система шаблонов не имеет понятия "экранирование", для отображения одного из битов, используемых в тегах шаблона, вы должны использовать тег
{% templatetag %}
.
Например:
<p>"{% templatetag openvariable %} some text {% templatetag closevariable %}"</p>
появится так:
<p>"{{ some text }}"</p>
Django 1.5 представил {% verbatim %}
тег шаблона. Он останавливает шаблон из разбора содержимого этого тега:
{% verbatim %}
{{ var }}
{% endverbatim %}
будет отображаться как:
{{ var }}
Изменить: Я действительно не рекомендую это, потому что он не очень чистый, но он по-прежнему является вариантом.
Я искал тот, который я мог использовать с шаблонами JQuery, и решил, как сделать это без тегов или фильтров. Это как можно короче, чем я мог:
{{ "{{ any text }" }}}
Отпечатано как:
{{ any text }}
Почему это работает? Любой текст внутри {{}} отображается как есть, если у него нет двух закрывающих скобок}} в строке. Тогда есть три скобки подряд, django интерпретирует два первых, как конец переменной, оставляя одну дополнительную закрывающую фигуру.
Вы можете попробовать выполнить экранирование с помощью html-символов, например:
{= {
} = }
<p>"{{ some text }}"</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
и в шаблоне do
{% 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}}
}
Это выглядит неуклюжим, но это лучшее, что я нахожу до сих пор. Если у вас есть более чистое решение, скажите, пожалуйста.
Другим вариантом было бы добавить word joiner (нулевая ширина без пробела) между каждой фигурной скобкой:
<p>"{⁠{ some text }⁠}"</p>
Этот шаблонный тег (разработанный для использования с шаблонами jQuery) может сделать трюк. Это позволяет вам обернуть контент, который вы не хотите, чтобы Django интерпретировался как переменные с тегом шаблона.
Jinja, который используется для шаблонов, предлагает несколько предложений по экранированию здесь. Что лучше всего для меня работает, это что-то использовать например "{% raw %}{{ some text }}{% endraw %}"
он может быть разрешен путем использования смежных ребер angular, если его внутренний код javascript вы можете написать
'{'+'{address.'+key+'}}'
Я использовал это для печати переменных jinja в другой шаблон, используя javascript.