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