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

我在非 HTML 环境中使用 Django 模板,所以很自然我想关闭 HTML 自动转义。
如何在全球范围内关闭它?

这些选项抑制全局启用的自动转义,在我的用例中,我希望相反。


根据文档,DjangoTemplates 后端应该有一个“autoescape”选项。

我什至找到了添加它的功能请求和提交。


然而它似乎对我不起作用。


最小的例子:


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


MM们
浏览 206回答 1
1回答

慕妹3146593

问题是直接从 Template 类创建的模板没有考虑任何设置。为此,您需要通过引擎获取模板。这会起作用:from django.template import enginestemplate = engines['django'].from_string("My name is {{ my_name }}.")context = {"my_name": "<FooBar>"}print(template.render(context))如您所见,增加的好处包括from_string方法和直接传递 dict 而不是创建 Context 实例的能力。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python