Попытка проанализировать данные из MongoDB в JSON с помощью Pymongo, а затем вернуть список в DOM - PullRequest
0 голосов
/ 26 апреля 2018

Я абсолютный новичок в Python и Flask. По сути, это база данных студентов. Каждый документ содержит first_name, last_name, student_id и major. Я хочу, чтобы список отображался при посещении /view-students. Код:

@app.route("/view-students")
def view_students():
    if 'username' not in session:
        return render_template('index.html')

    students = mongo.db.students
    for student in students.find():
        student = dumps(student)
        print(student)
    return render_template('view-students.html', student=student)

Возвращается в виде строки или из того, что, по-видимому, показывает поиск в Google, BSON:

{"last_name": "Down", "student_id": "u6003698", "first_name": "Alec", "_id": {"$oid": "5ae0f4ca78ba1481a6284e83"}, "major": "German Literature"}
{"last_name": "Doe", "student_id": "u0000000", "first_name": "John", "_id": {"$oid": "5ae0f4f178ba1481a6284e84"}, "major": "Electrical Engineering"}

На стороне клиента я в основном хочу сделать что-то вроде этого:

  <table class="table">
    <thead>
      <tr>
        <th scope="col">Student ID</th>
        <th scope="col">Name</th>
        <th scope="col">Major</th>
    </thead>
    <tbody>
      {% for student in students %}
      <tr>
        {{students.first_name}}
      </tr>
      {% endfor %}
    </tbody>
  </table>

Я пытался использовать jsonify, json dumps, json-utils, и все, похоже, либо дают мне строку, либо говорят, что ее нельзя сериализовать.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 апреля 2018

Вы должны передать список в качестве аргумента, не нужно выводить содержимое:

@app.route("/view-students")
def view_students():
    if 'username' not in session:
        return render_template('index.html')

    students = list(mongo.db.students.find())
    return render_template('view-students.html', students=students)

И повторять шаблон, используя student, а не students (обратите внимание на s ):

  <table class="table">
    <thead>
      <tr>
        <th scope="col">Student ID</th>
        <th scope="col">Name</th>
        <th scope="col">Major</th>
    </thead>
    <tbody>
      {% for student in students %}
      <tr>
        {{student.first_name}}
      </tr>
      {% endfor %}
    </tbody>
  </table>
...