【问题标题】:Django single slug table and nested urls without prefixDjango 单 slug 表和没有前缀的嵌套 url
【发布时间】:2015-07-15 04:10:48
【问题描述】:

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

我正在尝试为 Django 制作一个单独的 slug 表。经过无数小时的研究,我发现这不是我坚持的常见问题。注意:我对 Django 比较陌生。

我要解决的真正问题

我想要一个没有前缀的基于 slug 的嵌套 url,如下所示:

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

还有:

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

等等……

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

到目前为止我的想法:

  • 为所有 slug 制作一个 slug 表,以确保它们在全球范围内是唯一的
  • 使用 django-contenttypes 作为与模型的关系来确定要加载哪些视图
  • 在 te slug 表中建立关系以定义应该嵌套的内容和不应该嵌套的内容
    • 想办法在 urls.py 中进行 slug 表查找,以检查 url 是否有效并选择正确的视图。

我发现一个 Rails gem 可以满足我的大部分需求:Friendly_Id

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

【问题讨论】:

  • Rails friendly_id gem 并没有真正做任何事情,除了允许您使用 slugs 而不是 ID,Django 开箱即用地支持它。对于具有独特 slug 的多个模型,它当然没有任何作用。
  • 好的,感谢您的意见 :) 我的印象是friendly_id 的历史模块确实有些相同...

标签: python django url slug django-contenttypes


【解决方案1】:

好的,所以这个问题比我说的更难也更独特。为了将来参考,这就是我最终解决问题的方法:

  • 制作 1 个 slug 表,其中所有 slug 都是唯一的。
  • 使用 Django ContenType 在 slug 表中的 slug 和它所属的实体之间创建generic relations
  • 使用通用关系创建了一个 middleware 请求重写器,它将基于 slug 的 url 的段重写为非 slug url,如下所示:test.com/category-slug/product-slugtest.com/category/6/product/12
  • 在 Django 内部使用重写后的 url

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多