Python: Веб-разработка (Flask)
Теория: Именованные маршруты
Шаблоны сайта содержат множество внутренних ссылок: от меню до кнопок и форм. До сих пор мы формировали эти ссылки прямо в тех местах, где они нам нужны:
Так же ссылки строятся и в обработчиках, например, при редиректах:
В примерах выше формирование ссылки зашито прямо в то место, где она используется. Такой способ формирования ссылок потенциально опасен. Например, маршрут может измениться с /users/{id} на /u/{id}. Тогда придется пройтись по всем шаблонам и изменить все ссылки /users/{{ user['id'] }} на /u/{{ user['id'] }}.
Если этот маршрут удалить, сайт и приемочные тесты продолжат работать, но ссылки начнут вести на страницы 404. Будет лучше, если страницы с такими ссылками начнут выдавать ошибки. Тогда выявить подобные ссылки станет крайне просто.
Чтобы решить эту задачу, придумали именованные маршруты. Каждому маршруту фреймворка присваивается имя, которое затем можно использовать при построении конкретной ссылки. во Flask в качестве такого имени используется имя обработчика:
В реальных приложениях ссылки формируются во многих их частях:
- В шаблонах
- В обработчиках (при редиректах)
- В письмах
Поэтому большинство фреймворков предоставляют готовую функцию, которую можно использовать везде, где формируются ссылки. В шаблонах Jinja2 ссылки строятся так:
В качестве первого параметра url_for() передается имя обработчика, а последующими параметрами — необходимые аргументы для функции-обработчика.
Так в шаблоне выше url_for('users_show', id=user.id) заменится на конкретную ссылку этого обработчика с подставленными плейсхолдерами. Например для пользователя с user.id равным 42 подставится ссылка /users/42
Используйте url_for() в шаблонах всегда. Так вы сможете избежать проблемы мертвых ссылок, ситуации, когда url обработчика поменяли в коде, но забыли поменять все старые недействительные ссылки в HTML-страницах.



