我正在Google App Engine中编写一个Django页面,用户可以在其中创建或编辑对象的实例并进行保存。因为创建新对象和编辑现有对象的代码(几乎)相同,所以我使用相同的代码进行编辑和创建。该对象称为Group。
在视图函数的顶部,如果提供了id,我加载Group实例,或者如果没有提供id,我会创建一个新实例:
def group_edit(request, group_id=None):
if(group_id is None):
group_inst = Group()
else:
group_inst = db.get(db.Key.from_path('Group', int(group_id)))
if(group_inst is None):
raise Http404()
然后,视图函数的其余部分在group_inst上运行,而不知道或关心group_inst是新实例还是现有实例。然而,有一个地方我需要知道其中的区别:页面标题。如果用户正在创建新组,我想显示“创建组”,否则我想显示“编辑组 - {{group.name}}”
直观地说,如果对象的密钥为None,我只需检查模板:
<h1>
{% if group_inst.key %}
Edit Group - {{ group_inst.name }}
{% else %}
Create Group
{% endif %}
</h1>
然而,这会引发NotSavedError。通过GAE文档查看我没有看到任何有用的信息。如何检查实例是否具有相应的数据存储记录?
答案 0 :(得分:2)
您应该使用has_key()
而不是仅使用密钥:
{% if group_inst.has_key %}