Как я могу сделать URL в Django подобными stackoverflow?

Я создаю видеосайт. Я хочу, чтобы мои прямые URL к видео были похожи на example.com/watch/this-is-a-slug-1, где 1 видео идентификатор. Я не хочу, чтобы краткий заголовок имел значение все же. example.com/watch/this-is-another-slug-1 должен указать на ту же страницу. На Так,/questions/id является единственной частью URL, который имеет значение. Как я могу сделать это?

6
задан 26 February 2010 в 04:08
поделиться

3 ответа

Переполнение стека использует форму

example.com/watch/1/this-is-a-slug

, которую легче обрабатывать. Вы открываете банку с червями, если хотите, чтобы идентификатор находился в конце токена слага, поскольку тогда он (например) ограничит типы слагов, которые вы можете использовать, или просто усложнит вам задачу.

Вы можете использовать обработчик URL, например:

(r'^watch/(?P<id>\d+)/', 'watch')

, чтобы получить только идентификатор и игнорировать все, что после идентификатора. (Обратите внимание, что нет символа конца строки $ .)

9
ответ дан 17 December 2019 в 02:27
поделиться

При всем уважении к Stackoverflow, это неправильный способ сделать это. Вам не нужно иметь два элемента в URL, которые идентифицируют страницу. ID не имеет значения - это мусор. Вы должны иметь возможность однозначно идентифицировать страницу по одному только slug.

-3
ответ дан 17 December 2019 в 02:27
поделиться

Я не использовал Django, но раньше использовал фреймворки MVC. Обычно у них есть какая-то функция маршрутизации URL-адресов, которая позволяет вам определять шаблон (обычно регулярное выражение), который отображается на контроллер.

Это может быть хорошим местом для начала: http://docs.djangoproject.com/en/dev/topics/http/urls/

Как сказал Джесси Бедер, вам просто понадобится регулярное выражение для сопоставления первого сегмента URL (/ watch) и числового идентификатора, а затем перенаправить его контроллеру часов, который будет обрабатывать идентификатор и игнорировать слаг.

0
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

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