2

学習プロジェクトとして、MongoDBとBottleをWebサービスに使用しています。私がやりたいのは、MongoDBから結果をフェッチし、それらをテンプレートに表示することです。テンプレートからの出力は次のとおりです。

output.tpl
<html><body>
%for record in records:
   <li>{{record.city}} {{record.date}}
%end
</body></html>

私は問題なくデータを引き出すことができます:

result = db.records.find(query).limit(3)
return template('records_template', records=result)

しかし、これでは出力がまったく発生しませんでした。一部のデバッグでは、結果が何らかのカーソルであることが示されています。

<pymongo.cursor.Cursor object at 0x1560dd0>

だから私はこれをテンプレートが望むものに変換しようとしました:

result = db.records.find(query).limit(3)
viewmodel=[]
for row in result:
  l = dict()
  for column in row:
    l[str(column)]=row[column]
  viewmodel.append(l)
return template('records_template', records=viewmodel)

デバッグすると、ビューデータが正常に見えることがわかります。

[{'_id': ObjectId('4fe3dfbc62933a0338000001'),
  'city': u'CityName',
  'date': u'Thursday June 21, 2012'},
 {'_id': ObjectId('4fe3dfbd62933a0338000088')
  'city': u'CityName',
  'date': u'Thursday June 21, 2012'},
 {'_id': ObjectId('4fe3dfbd62933a0338000089')
  'city': u'CityName',
  'date': u'Thursday June 21, 2012'}]

しかし、これは私が得ている応答です。なぜ何かアイデアはありますか?

AttributeError("'dict'オブジェクトには属性'city'"、)がありません

編集:問題が発生した場合に備えて、辞書キーを非Unicode文字列に変換するために、l [str(column)] = row [column]に関するビットを追加しましたが、どちらの方法でも問題はないようです。

4

2 に答える 2

14

プロパティを検索するには、辞書構文を使用する必要があります。

{{record['city']}} {{record['date']}}
于 2012-06-23T04:14:26.663 に答える
-1
result = db.records.find(query).limit(3)
viewmodel=[]
for row in result:
  l = dict()
  for column in row:
    l[str(column)]=row[column]
  viewmodel.append(l)
return template('records_template', records=viewmodel)

に要約することができます:

result = db.records.find(query).limit(3)
return template('records_template', records=list(result))

Pythonの美しさ...

于 2013-12-31T10:12:58.737 に答える