2013-08-18 35 views
0

我使用谷歌应用程序引擎1.8.3 - 的Python 2.7和NDB API作为数据存储区谷歌应用程序引擎 - 更新实体

假设我有一个HTML表格中显示的实体组的列表。 我想单击个人组的名称来编辑组的信息。 这个组的关键/ ID应该是什么,我应该使用哪一个?请大家看看下面

这里是我的模型:

class Group(ndb.Model): 
    name = ndb.StringProperty() 
    description = ndb.StringProperty() 

在我的html:

...... 
{% for group in groups %} 
    <tr> 
     <td> 
     <a href="/editGroup?id={{ ????????????? }}" {{ group.name}} </a> 
     </td> 
     <td> 
     {{ group.description}} 
     </td> 
    </tr> 
{% endfor %} 
...... 

在?????在<a>标签里面,我应该放什么?我应该把它传回服务器? group.key? group.key.id()?或者我必须将Property to Group模型添加为groupId = ndb.IntegerProperty()这样的关键属性?

我正在考虑使用实体的密钥,但我找不到一种方法来显示从'组'的HTML中的密钥,如group.something_to_get_the_key()

我能够使用group.key.id()获得数字ID,但根据https://developers.google.com/appengine/docs/python/ndb/entities#numeric_keys 数字ID可能不是唯一的。

感谢

回答

2

在NDB,键有urlsafe()方法产生适用于模板的使用和传递到URL字符串:

{{ group.key.urlsafe }} 

这证明你已经链接到同一页面上。

+0

请注意,如果它是jinja2模板,它将需要group.key.urlsafe()和括号。 – Greg

+0

此外,可能值得考虑使用'url_for()'而不是带有id的url路径。你需要一个'edit_group(group_id)'函数,用'@route('/ editGroup/')装饰,然后插入模板{{url_for('edit_group',group_id = group.key.id())}}'。哪个更灵活,更优雅,并且可以提供更好的路径语法。这是Flask,但我听说Django最近采用了这种路由方案。 – patb