为什么 django 无法相互识别 2 个路径转换器?

Why django can't recognize 2 path convertors from each other?

我有一个 Django 应用程序,我有 2 个 url 路径,只有最后一部分是路径转换器不同:

path('questions/<pk>', views.QuestionDetailView.as_view(), name='question_detail'),
path('questions/<slug:tag_slug>', views.QuestionListView.as_view(), name='questions_by_tag')

当我转到 127.0.0.1:8000/questions/1 没问题,它显示了正确的结果,但是当我转到 127.0.0.1:8000/questions/something(有些东西是 slug ) 它说找不到页面!(它必须使用 seconed url 路径但它没有!)

当我更改路径顺序时,它正确显示第二个,而另一个有问题! 有人可以帮我吗?

您没有为 <pk> 指定路径转换器,因此它将使用 <str:…> path converter [Django-doc],而 <str:…> 超集 <slug:…>,因此与 <slug:…> 匹配的所有内容也与 <str:…> 匹配,因此第二个模式永远不会触发。

您应该对整数使用 <int:…> 路径转换器,因此:

path('questions/<strong><int:</strong>pk<strong>></strong>/', views.QuestionDetailView.as_view(), name='question_detail'),
path('questions/<slug:tag_slug>/', views.QuestionListView.as_view(), name='questions_by_tag')