Код Middle Django: устройство обновлено

Свой URL-резолвер с конвертерами

Условие

Реализуйте упрощённый резолвер: resolve(patterns, path). Шаблоны вида orders/<int:pk>/ или users/<slug:name>/posts/; конвертеры int (только цифры, результат число), slug (латиница, цифры, -, _), str (любые символы, кроме /, непустые). Шаблоны проверяются по порядку. Верните [имя, параметры] первого подошедшего (patterns это список пар [шаблон, имя]) или None.

Примеры

resolve([["orders/<int:pk>/", "order-detail"]], "orders/42/") // ["order-detail", {"pk":42}]
resolve([["orders/<int:pk>/", "order-detail"]], "orders/abc/") // null
resolve([["users/<slug:name>/posts/", "user-posts"]], "users/anna-1_x/posts/") // ["user-posts", {"name":"anna-1_x"}]

Как подойти

Подсказки: 2
  1. Каждый <conv:name> превращается в (?P<name>...).
  2. re.fullmatch, а не match.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.