Почему callback_query_handler обрабатывает лишь последнюю строку?

Использую библиотеку Aiogram для telegram ботов. Мой telegram бот обрабатывает лишь одну inline строку, и мне кажется, что только последнюю.

Вот код:

keyboard = types.InlineKeyboardMarkup()
foods = ['Бургер', 'Картофель', 'Куринные ножки']
for food in foods:
    inline_btns = types.InlineKeyboardButton(food, callback_data=food)
    keyboard.add(inline_btns)

    @dp.callback_query_handler(lambda c: c.data == food)
    async def process_callback(call: types.CallbackQuery):
        await bot.edit_message_text(text=f"Нажата кнопка {food}", chat_id=call.message.chat.id,
                                    message_id=call.message.message_id)
await message.answer("Выберите блюдо:", reply_markup=keyboard)

Срабатывает лишь последняя строка из массива: "Куринные ножки". Если поставить на последнее место в массиве, например "Бургер" - сработает Бургер и т.д. Как это исправить? Помогите, пожалуйста


Ответы (1 шт):

Автор решения: dixik

вместо {food} используйте call.data.

{food} вообще глупо использовать в данном случае, он в любом случае будет последний в итерации.

→ Ссылка