我在非 HTML 环境中使用 Django 模板,所以很自然我想关闭 HTML 自动转义。如何在全球范围内关闭它?这些选项抑制全局启用的自动转义,在我的用例中,我希望相反。根据文档,DjangoTemplates 后端应该有一个“autoescape”选项。我什至找到了添加它的功能请求和提交。然而它似乎对我不起作用。最小的例子:from django.template import Contextfrom django.template import Templateimport djangofrom django.conf import settingsTEMPLATES = [ { "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
1 回答

慕妹3146593
TA贡献1820条经验 获得超9个赞
问题是直接从 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 实例的能力。
添加回答
举报
0/150
提交
取消