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

Posted

技术标签:

【中文标题】如何在 Django 中创建类似于 *** 的 URL?【英文标题】:How can I make URLs in Django similar to ***? 【发布时间】:2011-01-21 07:38:51 【问题描述】:

我正在创建一个视频网站。我希望我的视频直接网址看起来像 example.com/watch/this-is-a-slug-1,其中 1 是视频 ID。不过,我不希望蛞蝓重要。 example.com/watch/this-is-another-slug-1 应该指向同一页面。在 SO 上,/questions/id 是 url 中唯一重要的部分。我该怎么做?

【问题讨论】:

【参考方案1】:

Stack Overflow 使用形式

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

这更容易处理。如果您希望 ID 位于 slug 令牌的末尾,那么您就是在打开一罐蠕虫,从那时起它将(例如)限制您可以使用哪些类型的 slug,或者只是让您自己更难。

您可以使用以下网址处理程序:

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

只获取 ID 并忽略 ID 后面的任何内容。 (注意没有$ 行尾字符。)

【讨论】:

嗯,谢谢你的建议。如果它是 example.com/watch/1-this-is-a-slug,获取 id 会很困难吗?另外,如果这些问题看起来很愚蠢,我很抱歉!这是我实际开发的第一个站点,而不仅仅是设计和布局。非常感谢您的帮助。 @Matt,这不会那么难,但你为什么要这么做?做 Stack Overflow 所做的事情是非常标准的做法。 老实说,我不确定我为什么要这样做。如果 /id/slug 可以接受,我会这样做。再次感谢。 如果说 url 应该是 /2/this-is-title 并且用户将其更改为 /2/this-is,我将如何编写标题。是否可以一直写完整的标题?【参考方案2】:

我没有使用过 Django,但我之前使用过 MVC 框架。通常,它们具有某种 URL 路由功能,可让您定义映射到控制器的模式(通常是正则表达式)。

这可能是一个不错的起点:http://docs.djangoproject.com/en/dev/topics/http/urls/

正如 Jesse Beder 所说,您只需要正则表达式来匹配第一个 URL 段 (/watch) 和数字 ID,然后将其转发到手表控制器,后者将处理 ID 并忽略 slug。

【讨论】:

【参考方案3】:

尽管对 *** 给予应有的尊重,但这是错误的做法。您不需要在 URL 中包含两个标识页面的元素。 ID 无关紧要 - 它是垃圾。您应该能够仅从 slug 中唯一地标识一个页面。

【讨论】:

重复标题怎么办?还是角色刚刚从蛞蝓中移除的事实?标题为“C++ 中的指针”和“C 中的指针”的问题都会得到相同的结果,并且不可能创建具有现有标题的问题,否则旧问题将变得无法访问。 ID 是唯一标识符,slug 用于人类/搜索引擎/等友好性。

以上是关于如何在 Django 中创建类似于 *** 的 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 postgresql 中创建只读视图,类似于 oracle?

如何在 SQL Server [2005] 中创建类似于 .dbo 的架构

在 Django Python 中创建一个估算器工具

如何在 Python 中创建类似于以下代码示例的径向集群?

如何在 Android 中创建类似于“选项卡布局”的圆形数组?

如何在 C++ 中创建类似于 Python 的 numpy 数组的数组?