代码之家  ›  专栏  ›  技术社区  ›  Sergey Golovchenko

如何在django中使用Context时禁用HTML编码

  •  19
  • Sergey Golovchenko  · 技术社区  · 17 年前

    在我的django应用程序中,我使用一个模板来构造电子邮件正文,其中一个参数是url,注意url中有两个参数,用与号分隔。

    t = loader.get_template("sometemplate")
    c = Context({
       'foo': 'bar',
       'url': 'http://127.0.0.1/test?a=1&b=2',
    })
    print t.render(c)
    

    渲染后,它将生成: http://127.0.0.1/test?a=1&b=2

    请注意,与号是HTML编码的“&”。解决这个问题的一种方法是将每个参数分别传递给我的模板,并在模板中构造url,但我想避免这样做。

    是否有办法禁用上下文参数的HTML编码,或者至少避免与号编码?

    2 回复  |  直到 12 年前
        1
  •  20
  •   Jonny Buchanan    17 年前

    要为单个变量关闭它,请使用 mark_safe :

    from django.utils.safestring import mark_safe
    
    t = loader.get_template("sometemplate")
    c = Context({
       'foo': 'bar',
       'url': mark_safe('http://127.0.0.1/test?a=1&b=2'),
    })
    print t.render(c)
    

    或者,从Python代码中完全关闭自动转义, use the autoescape argument when initialising a Context :

    c = Context({
       'foo': 'bar',
       'url': 'http://127.0.0.1/test?a=1&b=2',
    }, autoescape=False)
    

    这个 How to turn [Automatic HTML escaping] off 如果您愿意在模板中进行操作,文档的一节将介绍一些模板内选项。

        2
  •  8
  •   James Bennett    17 年前

    或者在模板中使用“安全”过滤器。

    此外,我再怎么强调熟悉Django文档的重要性也不为过;许多像这样的常见问题都很容易找到答案和解释( like this one ),阅读文档并了解一切是如何工作的,这将大大减少你需要花在问“为什么这样做”上的时间,并增加你花在构建按你想要的方式工作的东西上的时间。

    推荐文章