Я создаю видео сайт. Я хочу, чтобы мои прямые URL-адреса видео выглядели как example.com/watch/this-is-a-slug-1, где 1 — идентификатор видео. Хотя я не хочу, чтобы слизень имел значение. example.com/watch/this-is-another-slug-1 должен указывать на ту же страницу. В SO /questions/id — единственная часть URL-адреса, которая имеет значение. Как я могу это сделать?
Как я могу сделать URL-адреса в Django похожими на stackoverflow?
Ответы (3)
Переполнение стека использует форму
example.com/watch/1/this-is-a-slug
которым легче управлять. Вы открываете банку с червями, если хотите, чтобы идентификатор был в конце токена слага, поскольку тогда он (например) ограничит, какие виды слагов вы можете использовать, или просто усложнит себе задачу.
Вы можете использовать обработчик URL, например:
(r'^watch/(?P<id>\d+)/', 'watch')
чтобы получить только идентификатор и игнорировать все после идентификатора. (Обратите внимание, что нет символа конца строки $
.)
Я не использовал Django, но раньше использовал фреймворки MVC. Как правило, у них есть какая-то функция маршрутизации URL-адресов, которая позволяет вам определить шаблон (обычно регулярное выражение), который сопоставляется с контроллером.
Это может быть хорошим местом для начала: http://docs.djangoproject.com/en/dev/topics/http/urls/
Как заявил Джесси Бедер, вам просто нужно, чтобы регулярное выражение соответствовало первому сегменту URL-адреса (/watch) и числовому идентификатору, а затем перенаправляло его на контроллер часов, который обрабатывал бы идентификатор и игнорировал слаг.
При всем уважении к Stackoverflow, это неправильный способ сделать это. Вам не нужно иметь два элемента в URL-адресе, которые идентифицируют страницу. Идентификатор не имеет значения - это барахло. Вы должны иметь возможность однозначно идентифицировать страницу только по слагу.