为了账号安全,请及时绑定邮箱和手机立即绑定

如何全局禁用 Django 模板的自动转义?

如何全局禁用 Django 模板的自动转义?

MM们 2021-12-16 14:54:21
我在非 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 &lt;FooBar&gt;.我可能错过了一些愚蠢的东西。有人可以启发我吗?我的虚拟环境: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 实例的能力。


查看完整回答
反对 回复 2021-12-16
  • 1 回答
  • 0 关注
  • 205 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号