Django single slug table 和没有前缀的嵌套 url

Django single slug table and nested urls without prefix

好的,这是我的(看似独特的)问题:

我正在尝试让一个 slug table 为 Django 工作。经过无数小时的研究,我发现这不是我认为的常见问题。注意:我是 Django 的新手。

我要解决的真正问题

我想要一个没有前缀的基于 url 的嵌套 slug,像这样:

www.example.com/category-name/product-name

还有:

www.example.com/category-name/brand-name

等等...

应该有 slug 历史的可能性,所以旧的 slug 可以被重定向。

到目前为止我想出了什么:

我找到了一个 Rails gem 可以满足我的大部分需求:Friendly_Id

显然我犯了一些基本的设计错误。有人能指出我正确的方向吗?

好吧,原来这个问题比我想的更难也更独特。为了将来参考,这就是我最终解决问题的方式:

  • 制作 1 个 slug table,其中所有 slug 都是独一无二的。
  • 使用Django ContenType使generic relations在slugtable中的slug和它所属的实体之间
  • 制作了一个 middleware 请求重写器,将基于 url 的 slug 的段重写为非 slug url,就像这样:test.com/category-slug/product-slugtest.com/category/6/product/12, 使用通用关系。
  • 在Django内部使用重写的url

注意:这种方法要求所有 slug 在全局范围内都是唯一的,因此 url 的所有片段都是唯一的,这有点麻烦,但是是可行的。