Цикл For с использованием Jinja и PyMongo повторяет один и тот же вывод для всего dict

#python #for-loop #flask #jinja2 #pymongo

#python #for-цикл #flask #jinja2 #pymongo

Вопрос:

Я пытаюсь напечатать, от кого поступил запрос на добавление в друзья. Для этого у меня есть это app.route:

 @app.route("/friend_requests", methods=["GET", "POST"])        
def friend_requests():
    user = session["user"] or None
    find_request = mongo.db.friend_requests.find_one({"friend_request_to": user})
    print(find_request)
    return render_template("friend_requests.html", find_request=find_request)
 

Затем я добавляю это в цикл for в HTML с использованием Jinja:

 {% for find_requests in find_request %}
<span>from {{ find_request.friend_request_from }}</span>
{% endfor %}
 

Вывод print (find_request) в терминале выглядит следующим образом:

 {'_id': ObjectId('600d281ec3957da9d448b845'), 'friend_request_from': 'admin2', 'friend_request_to': 'test3'}
 

И вывод в HTML (я покажу его позже, когда все сделаю правильно) выглядит так:

  from admin2 from admin2 from admin2 
 

Кажется, что цикл повторяется для каждого элемента в коллекции.

Чего я действительно хочу, так это чтобы цикл находил каждый раз, когда этому зарегистрированному пользователю отправляется запрос на добавление в друзья. В этом случае для целей тестирования был отправлен только один запрос.

Как мне заставить цикл печатать только элемент friend_request_from в коллекции?

Комментарии:

1. Я думаю, вы хотели переменную find_requests , а find_request не внутри <span> тега.

2. да, это было частью проблемы. Я исправил это, сейчас я добавляю ответ.

Ответ №1:

Я решил увеличить маршрут:

 @app.route("/friend_requests/<user>", methods=["GET", "POST"])        
def friend_requests(user):
    user = session["user"]
    find_request = mongo.db.friend_requests.find({"friend_request_to": user})
    print(user)
    print(find_request)
    return render_template("friend_requests.html", find_request=find_request)
 

Частью проблемы было присвоение имен переменным — я запутался.

 {% for x in find_request %}
<li>
    <div class="collapsible-header teal lighten-5">
        <i class="fas fa-chevron-circle-down blue-text text-darken-3"></i>
        <strong>{{ x.friend_request_from }}</strong>
    </div>
</li>
{% endfor %}
 

(слегка стилизованный, но цикл остается тем же).

Это решает проблему для всего вывода.