【问题标题】:How do I display ${'None'} in a Django Mako template?如何在 Django Mako 模板中显示 ${'None'}?
【发布时间】:2012-09-22 19:34:00
【问题描述】:

我正在尝试使用 Mako 模板在 Django 网站上显示可能值列表中的单词(包括“无”、“小”和“更多”)。三个词中只有两个实际呈现。 'None' 被解释为 None 并在我调用 ${variable} 时转换为空字符串。

在故障排除中,我确定实际上在 mako 模板中写入 ${'None'} 会向浏览器返回一个空字符串。

有没有办法让mako模板打印这个字符串?

谢谢!

【问题讨论】:

  • 您确定${"None"} 呈现为空字符串吗?它对我来说呈现为None。您是否碰巧忘记将" 放在None 周围?在${"None"}?
  • 如果您确实将${"None"} 呈现为空字符串,如果您使用${"None"|n},您会看到什么?
  • 我检查了我的测试,我使用了引号。您对 |n 的建议非常有效!那是 python、django 还是 mako 构造?

标签: python django mako


【解决方案1】:

Mako 有一个过滤器系统,它使用| 运算符将转义过滤器应用于${}

如果没有任何配置,Mako 默认会隐式使用unicode 过滤器。虽然您始终可以通过设置 default_filters 参数来更改 Mako 使用的默认过滤器。

n filter 禁用所有默认过滤;只会应用在本地表达式标签中指定的过滤器。

所以默认情况下,Mako 应该${"None"} 渲染为None 而不是空字符串。它仅在添加n 过滤器时才对您有效,这表明您可能已将default_filters 设置为将字符串None 转义为空字符串的其他过滤器。 n 会修复它,但在你使用它之前,你可能应该进一步挖掘一下default_filters 是否已在你的代码中的某个位置设置。

警告n 过滤器不应正常应用于任何用户(即您网站的用户)输入,因为不转义意味着您容易受到一系列攻击,例如作为 XSS。

【讨论】:

  • 谢谢!这是一个非常有用的解释。我将对我的过滤器设置进行一些调查。
  • 我做了更多调查。我从以前的开发人员那里继承了一些代码。他使用了一个自定义过滤器,将任何等于“无”的输入更改为“”。感谢您为我指明正确的方向!
  • @Brian 真棒!很高兴帮助:)
猜你喜欢
  • 2011-07-17
  • 2016-08-02
  • 2020-02-01
  • 2017-11-13
  • 1970-01-01
  • 2021-07-25
  • 2011-04-16
  • 2011-12-27
  • 2011-02-04
相关资源
最近更新 更多