Я создаю видео-сайт. Я хочу, чтобы мои прямые ссылки на видео выглядели как example.com/watch/this-is-a-slug-1, где 1 - это идентификатор видео. Я не хочу, чтобы пуля имела значение. example.com/watch/this-is-another-slug-1 должен указывать на ту же страницу. В SO,/questions/id - это единственная часть URL-адреса, которая имеет значение. Как я могу это сделать?Как сделать URL-адреса в Django похожими на stackoverflow?
ответ
переполнения стека используется форма
example.com/watch/1/this-is-a-slug
, который проще в обращении. Вы открываете банку червей, если хотите, чтобы идентификатор был в конце токена слипа, так как тогда он (например) ограничит, какие виды слизней вы можете использовать, или просто усложните себе.
Вы можете использовать обработчик URL-адрес, как:
(r'^watch/(?P<id>\d+)/', 'watch')
, чтобы захватить только идентификатор и игнорировать ничего после ID. (Примечание: нет $
символ конца строки.)
При всем уважении к Stackoverflow это неправильный способ сделать это. Вам не нужно иметь два элемента в URL-адресе, который идентифицирует страницу. Идентификатор не имеет значения - это хлам. Вы должны иметь возможность однозначно идентифицировать страницу только из одного пула.
Как насчет дублирующих названий? Или тот факт, что персонажи просто удаляются из пули? Вопросы под названием «Указатели в C++» и «Указатели в C» будут иметь одинаковый пул, и было бы невозможно создать вопрос с существующим названием, иначе старый вопрос станет недоступным. Идентификатор - это уникальный идентификатор, а пуля - для удобства человека/поисковой системы и т. Д. –
Я не использовал Django, но раньше использовал рамки MVC. Как правило, у них есть некоторая функция маршрутизации URL-адресов, которая позволяет вам определять шаблон (обычно регулярное выражение), который сопоставляется с контроллером.
Это может быть хорошим местом для начала: http://docs.djangoproject.com/en/dev/topics/http/urls/
Как заявил Джесси Beder, вы бы просто нужно регулярное выражение, чтобы соответствовать сегменту первого URL (/ часы) и числовой идентификатор, а затем вперед, что контроллер часов, который будет обрабатывать идентификатор и игнорировать слизню.
Хм, спасибо за этот совет. Было бы трудно получить идентификатор, если бы он был example.com/watch/1-this-is-a-slug? Кроме того, если эти вопросы кажутся глупыми, извините! Это первый сайт, который я фактически разрабатываю вместо того, чтобы просто конструировать и планировать. Так спасибо за вашу помощь. – 2010-02-26 04:29:07
@ Matt, это было бы не так сложно, но зачем вы этого хотите? Практически стандартная практика делает то, что делает Stack Overflow. –
Честно говоря, не знаю, почему я хочу это сделать. Если/id/slug является приемлемым, я сделаю это. Еще раз спасибо. – 2010-02-26 04:37:40