【问题标题】:Jinja2 returns "None" string for Google App Engine modelsJinja2 为 Google App Engine 模型返回“None”字符串
【发布时间】:2010-04-22 23:15:57
【问题描述】:

Google App Engine 模型,例如:

from google.appengine.ext.db import Model

class M(Model):
    name = db.StringProperty()

然后在一个从 Django 视图调用的 Jinja2 模板中,其中一个 M 实例作为 m 传入:

The name of this M is {{ m.name }}.

m 被初始化而没有设置name 时,会打印以下内容:

这个M的名字是None。

最好的和预期的输出(以及使用 Django 模板时的输出)是/是:

这个M的名字是。

您知道为什么会发生这种情况,以及如何获得首选和预期的输出吗?

【问题讨论】:

  • 值得注意的是,设置一个默认值,ala。 name = db.StringProperty(default="") 解决了这个问题。问题似乎是 m.name 是 NoneType 除非有默认值。
  • 你的类应该继承db.Model,像这样:class M(db.Model):——这会改变什么吗?
  • @Jason Hall - 感谢您的关注。不幸的是,这并不能解决问题。
  • 我想你自己找到了答案。如果您没有为该属性指定名称,App Engine 似乎将其存储为None,而不是“”,因此当它被打印时,它会被打印为“无”。将默认值指定为“”,您的问题就会消失,就像您说的那样。
  • @Jason Hall:他是从 db 模块导入模型,而不是导入 db 本身的正常做法。这不是问题,除非在风格上。

标签: python google-app-engine jinja2


【解决方案1】:

您可能还想考虑使用 Jinja2 的“或”...

The name of this M is {{ m.name or ''}}.

如果bool(m.name) == False,这将显示The name of this M is .


如果m.name == False 并且您想将其显示为字符串“False”,您可以使用Jinja2 的“默认”过滤器:

The name of this M is {{ m.name|default('') }}

如果m.name is None,这将显示The name of this M is .

如果m.name == False,这将显示The name of this M is False.


如果您想使用默认过滤器并且仍然将评估为 False 的任何内容显示为您定义的默认值,请添加一个额外的参数:

The name of this M is {{ m.name|default('', true) }}

这应该与{{ m.name or '' }}具有完全相同的效果。


你可以在Jinja2's Builtin Filters reference找到所有这些信息

【讨论】:

    【解决方案2】:

    我想你自己找到了答案。如果您没有为该属性指定名称,App Engine 似乎将其存储为 None,而不是“”,因此当它被打印时,它会被打印为“None”。将默认值指定为“”,您的问题就会消失,就像您说的那样。

    【讨论】:

    • 值得注意的是,您也可以通过修改class jinja2.Undefined 来解决此问题。
    【解决方案3】:

    如果他不希望空字符串成为默认值怎么办?

    我自己也有这个问题。我不想在那里有空字符串。我想要空/无/无类型。这与空字符串不同。

    所以我再次向大家提出这个问题——Jinja 坚持要翻译“None”。什么给了?

    【讨论】:

    • 我认为您可以通过重载 jinja2.Undefined jinja.pocoo.org/api/#undefined-types > 并将其作为 undefined 参数传递给您的 jinja2.Environment 来解决此问题。
    • 尝试使用 Jinja 过滤器“默认”
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多