django url模式错误,id未传递给视图。

时间:2018-03-25 22:50:21

标签: django django-rest-framework

我尝试创建rest api,但却停留在生成url。

urlpatterns = [
path('admin/', admin.site.urls),
url(r'^api/shop/', include(('shop.api.urls', 'shop'), namespace='api-shop',)), ]

也试过

path('api/shop/', include(('shop.api.urls', 'shop'), namespace='api-shop',)),

在shop / api / urls.py我写了

urlpatterns = [
url(r'^(P<id>\d+)/$', ShopRudView.as_view(), name='shop-rud')

并在shop / api / views.py中使用drf库泛型视图创建

class ShopRudView(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'id'
serializer_class = ShopSerializer

def get_queryset(self):
    return Shop.objects.all()

当我输入http://127.0.0.1:8000/api/shop/1时,我得到了

在untitled1.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式: 管理员/ 店/ ^ api / shop / ^(P \ d +)/ $ [name ='shop-rud'] 当前路径api / shop / 1与其中任何一个都不匹配。

如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您遗漏了正则表达式中的?

url(r'^(?P<id>\d+)/$', ShopRudView.as_view(), name='shop-rud')

或者,如果您想使用path

path('<int:id>/', ShopRudView.as_view(), name='shop-rud')

答案 1 :(得分:0)

在Django 3.1.1中

urlpatterns = [
    path('api/<int:id>/', views.EmployeeDetailsCBV.as_view()),
]

url: http://127.0.0.1:8000/api/3/
Django 3中的

'(?Pd +)/ $'无效。

https://docs.djangoproject.com/en/3.1/intro/overview/