如何在Django中创建类似于stackoverflow的URL?

6 投票
3 回答
841 浏览
提问于 2025-04-15 19:45

我正在创建一个视频网站。我希望视频的直接链接看起来像这样:example.com/watch/this-is-a-slug-1,其中的1是视频的ID。不过,我不想让这个“slug”(就是链接中的那部分文字)有太大关系。也就是说,像example.com/watch/this-is-another-slug-1这样的链接也应该指向同一个页面。在StackOverflow上,/questions/id是链接中唯一重要的部分。我该怎么做呢?

3 个回答

-3

尊重一下Stackoverflow,这种做法是不对的。你不应该在网址中用两个元素来标识一个页面。那个ID是没用的 - 就是多余的东西。你应该只用网址中的一部分(叫做slug)就能唯一地识别一个页面。

0

我没有用过Django,但我之前用过MVC框架。一般来说,这些框架都有一种URL路由功能,可以让你定义一个模式(通常是正则表达式),然后把这个模式映射到一个控制器上。

这是一个不错的入门地方:http://docs.djangoproject.com/en/dev/topics/http/urls/

正如Jesse Beder所说,你只需要一个正则表达式来匹配第一个URL部分(/watch)和一个数字ID,然后把这个信息转发给一个观看控制器,这个控制器会处理ID,而忽略其他部分。

9

Stack Overflow使用的是这种形式

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

这样处理起来更简单。如果你想把ID放在slug的最后,那就麻烦了,因为这样会限制你可以使用的slug类型,或者让事情变得更复杂。

你可以使用一个网址处理器,比如:

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

来只提取ID,忽略ID后面的任何内容。(注意这里没有$这个表示行结束的符号。)

撰写回答