#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 %}
(слегка стилизованный, но цикл остается тем же).
Это решает проблему для всего вывода.