@dimuska139
Backend developer

Как правильно реализовать роутинг в Django?

Сайт имеет множество страниц вида /<что-то 1>/<что-то 2>. Проблема в том, что эти "что-то 1" и "что-то 2" лежат в базе, но при этом это могут быть совсем разные таблицы. Например:
/москва/ремонт-авто
/опель/колеса

Сложность в том, что городов много (хранятся в базе, могут меняться), марок автомобилей много (хранятся в базе, могут меняться) - и все это лежит в базе данных. То есть вручную слаги городов и марок авто прописать в роутере не вариант. На эти 2 вида урлов (подобных им может быть гораздо больше) нужно рендерить совершенно разные шаблоны, потому что типы этих страниц разные.
То есть сделать вот так, ясное дело, не получится, потому что эти регулярки по сути одинаковы:
url(r'^(?P<city_slug>.*)/(?P<service_slug>.*)/$', ServiceView.as_view(), name='service'),
url(r'^(?P<model_slug>.*)/(?P<part_slug>.*)/$', PartView.as_view(), name='part'),

Вижу такие варианты:
  1. Использовать FlatPages и сделать catchall-view, которая будет по урлу доставать из базы сгенерированный контент flat-страницы. Тут не ясно, в какой момент генерить эти страницы
  2. Сделать view, внутри которой брать slug и по наличию его в той или иной таблице рендерить нужный шаблон. Урл с кучей ifаков или некая фабрика выглядят сомнительно
  3. Каким-то образом внутри view, если slug города не найден в таблице переходить к следующему урлу роутинга. Не уверен, что это реализуемо


Как эту задачу в Django правильно реализовать?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы