Как я могу сделать URL-адреса в Django похожими на stackoverflow?

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


person Community    schedule 26.02.2010    source источник


Ответы (3)


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

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

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

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

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

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

person Jesse Beder    schedule 26.02.2010
comment
Хм, спасибо за этот совет. Было бы сложно получить идентификатор, если бы это был example.com/watch/1-this-is-a-slug? Кроме того, если эти вопросы кажутся глупыми, извините! Это первый сайт, который я на самом деле разрабатываю, а не просто проектирую и выкладываю. Так что спасибо за вашу помощь. - person ; 26.02.2010
comment
@ Мэтт, это было бы не так сложно, но зачем тебе это? Делать то, что делает Stack Overflow, довольно стандартная практика. - person Jesse Beder; 26.02.2010
comment
Честно говоря, не уверен, почему я хотел бы это сделать. Если /id/slug подходит, я это сделаю. Спасибо еще раз. - person ; 26.02.2010
comment
Как бы я написал заголовок, если, скажем, URL-адрес должен быть /2/это-заголовок, а пользователь меняет его на /2/это-есть. Можно ли всегда писать полное название? - person iJK; 09.03.2013

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

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

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

person Carson Myers    schedule 26.02.2010

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

person Daniel Roseman    schedule 26.02.2010
comment
А как насчет повторяющихся заголовков? Или тот факт, что персонажи просто удаляются из слага? Вопросы под названием «Указатели в C++» и «Указатели в C» получат один и тот же ярлык, и будет невозможно создать вопрос с существующим заголовком, или старый вопрос станет недоступным. Идентификатор является уникальным идентификатором, а слаг предназначен для удобства человека/поисковой системы/и т. д. - person Carson Myers; 26.02.2010