我在非HTML环境中使用Django模板,因此自然希望关闭HTML自动转义功能。
如何在全球范围内将其关闭?
我知道很多抑制本地自动转义的选项:
这些选项会禁止全局启用的自动转义,在我的用例中,我希望相反。
根据docs,DjangoTemplates后端应该有一个“自动转义”选项。
我什至发现添加了feature request和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 <FooBar>.
我可能想念一些愚蠢的东西。 有人可以启发我吗?
我的虚拟环境:
python==3.6.5
Django==2.1.7
pip==9.0.3
pytz==2018.9
setuptools==39.0.1
答案 0 :(得分:0)
问题在于,直接从Template类创建的模板未考虑任何设置。为此,您需要通过引擎获取模板。这会起作用:
docker exec $container_name psql --username=$database_user_name --dbname=$database_name --command="SELECT 1;" > /dev/null
如您所见,增加的好处包括from django.template import engines
template = engines['django'].from_string("My name is {{ my_name }}.")
context = {"my_name": "<FooBar>"}
print(template.render(context))
方法和直接传递字典而不是创建Context实例的功能。