flask - излишнее количество функций

Рейтинг: 0Ответов: 1Опубликовано: 29.03.2023

У меня есть много функций, от которых хотелось бы избавиться, например:

@app.route('/ranobe/')
def ranobe_main():
    return render_template('ranobe/ranobe_main.html')


@app.route('/anime/sign_in/')
def sign_in():
    return render_template('login_or_register/sign_in.html')

И множество других похожих функций, которые просто ссылаются html файлы. Можно ли как-то сократить количество строк, чтобы не повторять постоянно одни и те же действия? Если да, то напишите в качестве примера код, который сократит большую часть повторяющихся функций, пожалуйста. Также хотелось бы, чтобы привели в пример код, который будет лучше выглядеть, так как я учусь. Заранее спасибо)

Ответы

▲ 2

Можно сделать функцию для создания обработчиков:

def template_route(path, template_file):
   @app.route(path)
   def handler():
       return render_template(template_file)
   return handler

ranobe_main = template_route('/ranobe', 'ranobe/ranobe_main.html')
sign_in = template_route('/anime/sign_in/', 'login_or_register/sign_in.html')

Можно пойти дальше, как предложил CrazyElf:

def template_routes(*args):
   assert len(args) % 2 == 0 
   for i in range(0, len(args), 2):
       path, template_file = args[i], args[i+1]
       template_route(path, template_file)


template_routes(
   '/ranobe', 'ranobe/ranobe_main.html',
   '/anime/sign_in/', 'login_or_register/sign_in.html',
)