Blazar-py
@Blazar-py
Python разработка. Боты, парсеры, чекеры.

Как подставлять данные в callback?

В коде очень много callback'ов, которых нужно отработать однотипно. Не хочется писать под каждый callback отдельно, так как по сути, переменные отличаются только цифрой в названии. Как упростить код и сделать его меньше?
@dp.callback_query_handler(text='acc_1')
async def send(call: types.CallbackQuery):
    await call.answer()
    await call.message.delete()
    await call.message.answer(f'Товар: {acc1_name}\nСтоимость: {acc1_price}')
@dp.callback_query_handler(text='acc_2')
async def send(call: types.CallbackQuery):
    await call.answer()
    await call.message.delete()
    await call.message.answer(f'Товар: {acc2_name}\nСтоимость: {acc2_price}')
@dp.callback_query_handler(text='acc_3')
async def send(call: types.CallbackQuery):
    await call.answer()
    await call.message.delete()
    await call.message.answer(f'Товар: {acc3_name}\nСтоимость: {acc3_price}')
@dp.callback_query_handler(text='acc_4')
async def send(call: types.CallbackQuery):
    await call.answer()
    await call.message.delete()
    await call.message.answer(f'Товар: {acc4_name}\nСтоимость: {acc4_price}')
@dp.callback_query_handler(text='acc_5')
async def send(call: types.CallbackQuery):
    await call.answer()
    await call.message.delete()
    await call.message.answer(f'Товар: {acc5_name}\nСтоимость: {acc5_price}')


Пробовал через for in range, но подставлялось только пятое значение
for i in range(1, 6):
    @dp.callback_query_handler(text=f'acc_{i}')
    async def send(call: types.CallbackQuery):
        acc_name = globals().get(f"acc{i}_name")
        acc_price = globals().get(f"acc{i}_price")
        await call.answer()
        await call.message.delete()
        await call.message.answer(f'Товар: {acc_name}\nСтоимость: {acc_price}', reply_markup=inlinekeyboard_back_menu)
  • Вопрос задан
  • 232 просмотра
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
А просто декоратор другой взять?
@dp.message_handler(regexp=r'^acc_\d+')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы