Просмотр ошибки в Flask при получении элемента в MongoDB - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь заполнить страницу, созданную в Flask, элементами из MongoDB. Мой маршрут выглядит следующим образом:

@app.route('/job/<posting>', methods=["GET"])
def job_post(posting):
    posting = db.openings.find({'Id': posting})
    title = db.openings.find_one({'Id': posting}, {'Title': 1, '_id':0})
    return render_template('post_page.html', posting=posting, title=title)

Моя страница шаблона для post_page.html:

{% extends "layout.html" %}
{% block content%}

<div class="container">


  <article class="media content-section">
    <div class="media-body">
      <div class="article-metadata">
        <h3><a class="mr-2" href="#">{{ title }}</a></h3>
    </div> -->
  </article>


</div>

{% endblock content %}

Когда я пытаюсь получить доступ к странице, появляется сообщение об ошибке "bson.errors.InvalidDocument: cannot encode object: <pymongo.cursor.Cursor object at 0x10dd402e8>, of type: <class 'pymongo.cursor.Cursor'>"

Когда я исследую эту ошибку, большинство проблем связано с использованием find вместо find_one. Я использую find_one здесь, и когда я тестирую его в оболочке Python, тип переменной для title это словарь, поэтому я не понимаю, почему он передает объект курсора в шаблон.

1 Ответ

0 голосов
/ 03 октября 2019

Вы передаете posting в функцию, а затем немедленно устанавливаете ее в первой функции posting = db.openings.find({'Id': posting}). Я подозреваю, что вы не хотите этого делать.

find() возвращает курсор, который вы затем передаете в функцию find_one(), которая вызывает ошибку, которую вы видите.

НеУбедитесь, что вы пытаетесь достичь, позвонив find() затем find_one() в той же коллекции. Мое предложение, вы удалите строку posting = db.openings.find({'Id': posting})

...