Как глобально отключить автоэкранирование шаблонов Django? - PullRequest
0 голосов
/ 25 марта 2019

Я использую шаблоны Django в среде, отличной от HTML, поэтому, естественно, я бы хотел отключить автоматическое экранирование HTML.
Как мне отключить его на глобальном уровне?

Я знаю о множестве вариантов локального подавления автоматического выхода:

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

Согласно документам должна быть опция 'autoescape' для бэкэнда DjangoTemplates.
Я даже нашел запрос функции и commit , который его добавил.

Но, похоже, у меня это не работает.

Минимальный пример:

from django.template import Context
from django.template import Template
import django
from django.conf import settings

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "OPTIONS":
            {
            "autoescape": False
            }
    }
]
settings.configure(TEMPLATES=TEMPLATES)
django.setup()

template = Template("My name is {{ my_name }}.")
context = Context({"my_name": "<FooBar>"})
print(template.render(context))

Ожидаемый результат:
My name is <FooBar>.

Фактическая выработка:
My name is &lt;FooBar&gt;.

Я, наверное, упускаю что-то глупое. Может ли кто-нибудь просветить меня?

Моя виртуальная среда:

python==3.6.5  
Django==2.1.7  
pip==9.0.3  
pytz==2018.9  
setuptools==39.0.1

1 Ответ

0 голосов
/ 25 марта 2019

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

from django.template import engines
template = engines['django'].from_string("My name is {{ my_name }}.")
context = {"my_name": "<FooBar>"}
print(template.render(context))

Как видите, к дополнительным преимуществам относятся метод from_string и возможность напрямую передавать dict вместо создания экземпляра Context.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...