我在web2py中编写一个简单的Web应用程序,用于存储和检索数据库中的一些数据。为了按时间顺序保留条目,我的表有一个存储日期时间的属性。像这样:
db.define_table('tablename',
Field( ....
....
....
Field('created_on','datetime', default=request.now, writable=False),
Field('last_modified','datetime', default=request.now, update=request.now),
)
然后当我请求数据时,我将orderby属性设置为last_modified:
rows = db().select(db.tablename.ALL, orderby=db.tablename.last_modified)
然后,我将结果传递给Json字典对象。像这样:
I'm passing them into a JSON dictionary object.Like so:
d = { r.index_id : {'index_id':r.index_id,
....
....
'comments':r.comments,
'created_on':r.created_on,
'last_modified':r.last_modified}
for r in rows}
return response.json(dict(entry_dict=d))
当我从服务器得到响应时,我将dict返回到我的ractive对象。
MAIN.set('data_entries', data['entry_dict']);
然后,我将结果呈现为ractive:
{% #data_entries:index_id%}
<tr class = "datarow" onclick="window.document.location='{% url+ '/'+ index_id %}';">
<td>{% index_id %}</td>
....
<td>{% last_modified %}</td>
</tr>
{% /data_entries %}
然而,当数据返回到webapp时,我得到以下内容:
答案 0 :(得分:1)
在Python中,词典不保留顺序,因此当您将d
词典转换为JSON时,您不一定会按原始Rows
对象的顺序获取键。您可以改为使用OrderedDict
,但无论如何您似乎还不需要字典 - 只需创建一个列表(使用as_list
方法):
return response.json(dict(entry_dict=rows.as_list()))
然后在Ractive中,更改:
{% #data_entries:index_id %}
为:
{% #data_entries %}
您似乎不需要每个循环中的索引值。相反,您将能够访问每个记录的index_id
字段作为该部分的数据上下文的一部分。