2

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 的名字是 。

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

4

3 回答 3

14

您可能还想考虑使用 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 的内置过滤器参考中找到所有这些信息

于 2010-12-13T03:44:47.263 回答
1

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

于 2010-04-23T13:59:06.910 回答
1

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

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

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

于 2010-11-14T18:57:36.503 回答