Django 类似的 url 模式问题

Posted

技术标签:

【中文标题】Django 类似的 url 模式问题【英文标题】:Django similar url pattern issue 【发布时间】:2021-10-14 13:32:45 【问题描述】:

我正在开发一个产品比较模块,并且有如下的 url 模式:

path('comparison/<slug:slug1>-vs-<slug:slug2>/', views.compare_two_products, name="compare_two_products"),
path('comparison/<slug:slug1>-vs-<slug:slug2>-vs-<slug:slug3>/', views.compare_three_products, name="compare_three_products"),

问题是 Django (3.2.6) 总是匹配第一个模式并在我尝试访问第二个模式时返回 404。但是,如果我注释掉第一个模式,那么它就可以很好地匹配第三个模式。我想让这两种模式都以 slug-vs-slug-vs-slug 格式工作。关于我可能做错的任何建议?

提前致谢。

【问题讨论】:

【参考方案1】:

只需更改顺序或网址,例如

path('comparison/<slug:slug1>-vs-<slug:slug2>-vs-<slug:slug3>/', views.compare_three_products, name="compare_three_products"),
path('comparison/<slug:slug1>-vs-<slug:slug2>/', views.compare_two_products, name="compare_two_products"),

应该可以的

【讨论】:

谢谢@Sumithran 从没想过订单很重要。但是在 Django 尝试将其与第一个相似的 url 匹配之后,这完全有意义。

以上是关于Django 类似的 url 模式问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中使用来自 urls.py 的变量重定向 url 模式?

使用 repath 参数的 Django url 调度程序

Django URLs - 如何通过干净的 URLs 传递项目列表?

%20 的 django url 模式

Django url 模式不是注册的视图函数或模式

Django 排除 url 模式