Подтвердить что ты не робот

Как избежать {{или}} в шаблоне django?

Django рассматривает {{ var }} как некоторую переменную в своем шаблоне. Как я могу избежать {{ var }} или {{ или }}, чтобы django не рассматривал его как переменную.

<p>"{{ some text }}"</p> Должен печатать точно то же самое.

4b9b3361

Ответ 1

Я считаю, что вы ищете тег templatetag.

В качестве состояний, связанных с doc,

Поскольку система шаблонов не имеет понятия "экранирование", для отображения одного из битов, используемых в тегах шаблона, вы должны использовать тег {% templatetag %}.

Например:

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

появится так:

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

Ответ 2

Django 1.5 представил {% verbatim %} тег шаблона. Он останавливает шаблон из разбора содержимого этого тега:

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

будет отображаться как:

{{ var }}

Ответ 3

Изменить: Я действительно не рекомендую это, потому что он не очень чистый, но он по-прежнему является вариантом.

Я искал тот, который я мог использовать с шаблонами JQuery, и решил, как сделать это без тегов или фильтров. Это как можно короче, чем я мог:

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

Отпечатано как:

{{ any text }}

Почему это работает? Любой текст внутри {{}} отображается как есть, если у него нет двух закрывающих скобок}} в строке. Тогда есть три скобки подряд, django интерпретирует два первых, как конец переменной, оставляя одну дополнительную закрывающую фигуру.

Ответ 4

Вы можете попробовать выполнить экранирование с помощью html-символов, например:

{= &#123;

} = &#125;

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

Попробуйте сделать это в своем браузере.

Ответ 5

если вам просто нужно использовать {{}} как переменную для структуры шаблонов, например 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

Ответ 6

Несмотря на то, что вышеупомянутые ответы могут решить исходную проблему, я добавляю некоторые хаки здесь для тех, кто царапает их головы, как я.

Несколько раз мы хотим отобразить одну скобку, за которой следует переменная. Например, в 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}}
}

Это выглядит неуклюжим, но это лучшее, что я нахожу до сих пор. Если у вас есть более чистое решение, скажите, пожалуйста.

Ответ 7

Другим вариантом было бы добавить word joiner (нулевая ширина без пробела) между каждой фигурной скобкой:

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

Ответ 8

Этот шаблонный тег (разработанный для использования с шаблонами jQuery) может сделать трюк. Это позволяет вам обернуть контент, который вы не хотите, чтобы Django интерпретировался как переменные с тегом шаблона.

Ответ 9

Jinja, который используется для шаблонов, предлагает несколько предложений по экранированию здесь. Что лучше всего для меня работает, это что-то использовать например "{% raw %}{{ some text }}{% endraw %}"

Ответ 10

он может быть разрешен путем использования смежных ребер angular, если его внутренний код javascript вы можете написать

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

Я использовал это для печати переменных jinja в другой шаблон, используя javascript.