【问题标题】:Implementing URL slug functionality in a website在网站中实现 URL slug 功能
【发布时间】:2011-04-21 14:06:43
【问题描述】:

我想知道如何在网站中实现 URL slug 功能,而不会使当前正在查看的记录的 ID 显示在 URL 中。

例如,StackOverflow URL 如下所示:MVC Dynamic Views From Url Slug。请注意,URL 包含记录的 ID。如果我要将此页面添加为书签,并且由于某种原因记录的 ID 发生了更改,我以后将无法查看此记录。

我想实现一个不依赖于记录 ID 的 URL slug 功能,所以它看起来像 https://stackoverflow.com/questions/mvc-dynamic-views-from-url-slug

您能否提供实现此目的的步骤? 您是否使用记录的标题并对其进行 slugging,保存该 slug,并且不再更改它?

我正在寻找的示例 URL 是 http://weblogs.asp.net/scottgu/archive/2010/10/04/jquery-templates-data-link-and-globalization-accepted-as-official-jquery-plugins.aspx(注意 URL 中没有 ID)

谢谢!

【问题讨论】:

    标签: url url-routing slug


    【解决方案1】:

    这基本上就是你所做的。每种方法都有其优点:

    • 在 Stack Overflow 上,由于可以更改问题的标题,因此 ID 用于永久链接到问题,标题不正确的 URL 将简单地重定向。
    • 使用 slug 作为永久标识符意味着 slug 永远不会改变。更改标题是可能的,但它可能看起来令人困惑,您最好重定向 slug。此外,slug 要么需要是全球唯一的,要么你需要找到一种方法来强制每年/每月/每天或其他任何情况下的唯一性。

    您将需要一个数据库索引来提高 slug 查找的效率。幸运的是,Django 的Slug field 会自动创建数据库索引。

    您可能仍然希望有一个数字主键,只是为了简化数据库的其余部分。

    【讨论】:

      【解决方案2】:

      你在找URL Rewriting吗?

      【讨论】:

      • 不完全是。我想知道的是您将如何实现 URL slug 功能,以便 ID 不会显示在 URL 中,但会以某种方式显示正确的记录(这将映射到未显示的 ID)。主要是,在应用程序中,您根据 ID 访问记录。这个 ID 通常像 stackoverflow 一样在 URL 中传递。如果我要在我的 URL 中实现 URL slug 而不显示记录的 ID,我会怎么做?我很困惑在不使用记录 ID 的情况下实现此类 URL slug 功能的正确方法。希望这可以澄清。
      【解决方案3】:

      归根结底,您需要一些独特的方法来识别每个资源。大多数情况下,它是一个整数,因为它比 GUID 对数据库更友好且更人性化。如果您想使用任意字符串,这与整数 ID 的通用技术相同,但您必须小心不要让 2 条或更多条记录共享同一个 slug。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-15
        • 2012-10-02
        • 2012-12-30
        • 2021-04-22
        • 2010-09-07
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        相关资源
        最近更新 更多