Django重击网址 - 如何处理碰撞?

TM.*_*TM. 7 python django url slug collision

我目前正在Django开展一个玩具项目.

我的应用程序的一部分允许用户留下评论.我想获取评论的标题并将其强化以创建一个网址.

因此,如果用户写了一篇名为"有史以来最好的东西!"的评论,那么网址就像:www.example.com/reviews/the-best-thing-ever.

这一切都很好,但处理两个用户选择相同标题的情况的最佳方法是什么?我不想让标题必须是唯一的.

我曾考虑在某个地方的网址中添加评论ID,但我想避免任何不碰撞的网址的额外信息.

有任何想法吗?

Rya*_*eld 6

我会推荐像AutoSlugField这样的东西.它有一些关于配置唯一性(uniqueunique_with)的选项,并且具有额外的好处,即如果您愿意,可以根据模型上的另一个字段自动生成slug.


Ada*_*dam 6

关于独特的slug字段/方法我不喜欢的一件事是,如果你对单个标题有很多冲突,你最终会运行几个查询来尝试确定一个可用的slug.我知道你提到你不想显示非冲突slu的id,但是,就性能而言,我认为这是更好的选择.为了使URL更好看,我更喜欢在slug之前嵌入id,以便URL采用www.example.com/reviews/1/the-best-thing-ever的形式.