問題

メニューの各項目がMongoDBのIdObjectを取得するBootstrapのdropdownMenuを使用することを目指しています。

その理由は、そのコレクションに格納されているすべてのデータを取得するために、それらのIdObjectsを1つのリストに入れたいからです。したがって、ここに私のコードです:

HTML

 <div class="dropdown-menu" aria-labelledby="dropdownMenu2">
    {% for row in rows %}
       <button class="dropdown-item" href="./get_object?_id={{row['_id']}}" type="button">{{row['_id']}}</button>
    {% endfor %}
</div>
 

Python

 @app.route("/get_object", methods=['POST', 'GET'])
def get_object():
    cursor = object_collection.find({})
    for document in cursor:
        row = document['_id']
        return render_template("get_object.html", rows=row)
 

どういうわけか私は欲しいものを手に入れませんでした。私はPythonファイルとHTMLにいくつかのエラーがありました。私はそれを大丈夫にしている方法ですか?

   File "˜/application/app.py", line 52, in get_object
    return render_template("get_object.html", rows=row)

  File ˜/application/templates/get_object.html", line 18, in block "content"
    {% for row in rows %}
 

  ベストアンサー

あなたはちょうどリストが必要です。今、forループ内にreturnがあります。代わりに、リストに追加し、一度にリスト全体でテンプレートを呼び出すだけです。

 @app.route("/get_object", methods=['POST', 'GET'])
def get_object():
    rows = []                               # define an empty list
    cursor = object_collection.find({},{ "_id": 1 })
    for document in cursor:
        rows.append(document['_id'])        # <- append to the list

    return render_template("get_object.html", rows=rows)  # Use the whole list in output
 

また、.find({},{ _id: 1 })は、オブジェクト全体ではなく_idフィールドだけを投影することに注意してください。したがって、これは、不要なデータがネットワーク経由で送信されないように_idの値だけを必要とする場合に便利です。

テンプレートでは、これは値のリストに過ぎないので、_idプロパティはありません。値を使用するだけです。

 <button class="dropdown-item" href="./get_object?_id={{row}}" type="button">{{row}}</button>
 

  同じタグがついた質問を見る

pythonhtmlmongodbflask