当我尝试使用RetrieveAPIView
来查看django中的URL项时:
http://142.93.130.167:1080/api/videos/1
我得到404 not found
。
urls.py:
url(r'^videos/$', views.VideosList.as_view(), name="videos list"),
url(r'^videos/<int:pk>', views.VideoDetail.as_view(), name="video details"),
我在哪里错了?
django 1.11
答案 0 :(得分:1)
好吧,至少您混合使用了受支持的尾随/
行为。您最好选择其中任何一个:是否要求结尾/
(在第一个正则表达式中是必需的)(在第二个正则表达式中是必需的)。将其与您在settings中的APPEND_SLASH
值进行比较。
另一件事是您的URL模式名称与DRF命名样式不匹配(请参见examples):
videos list
将是videos-list
video details
-> videos-detail
这应该有助于DRF在HyperlinkedSerializer中确定其URL,等等。
还有一点:
在您的网址格式中,您可以使用带有path模式支持的占位符的正则表达式网址格式(url()
函数)。不要混在一起。
选择这个
url(r'^videos/(?P<pk>\d+)/$', views.VideoDetail.as_view(), name="video details"),
或这个
path('videos/<int:pk>', views.VideoDetail.as_view(), name="video details"),
由于建议不要使用path
,因此推荐使用 url
。
所以,我的建议是:
在Django> = 2.0上
url()
-> path
/$
在Django <2.0上
url()
正则表达式/$
或添加到每个模式答案 1 :(得分:0)
主要是因为URL后没有斜杠。您能否使用以下api来查看
http://142.93.130.167:1080/api/videos/1/
如果此方法有效,则表明是由于附加斜杠问题引起的。请在django documentation
中阅读更新:
好像您需要更新您的 urls.py
url(r'^videos/(?P<pk>[0-9]+)/', views.VideoDetail.as_view(), name="video details"),
您现在可以尝试吗?