【问题标题】:Get id from path variable url Django从路径变量 url Django 获取 id
【发布时间】:2021-03-31 01:09:45
【问题描述】:

我希望我的端点像 api/units/:id 这样将 id 作为路径变量传递

我写了以下代码

urlpatterns:
path('api/units/', UnitDetailsView.as_view())

views.py

class UnitDetailsView(APIView):
    http_method_names = ['get']
    permission_classes = (permissions.AllowAny,)
    serializer_class = UnitDetailsSerializer

    def get(self, request, id_unit):
        unit = Unit.objects.get(id=id_unit)

        return JsonResponse({
            'id': unit.id,
        }, status=200)

不过是 500 错误,因为它不将路径变量识别为 id_unit

TypeError: get() missing 1 required positional argument: 'id_unit'

什么是错误,我该如何解决?

【问题讨论】:

    标签: django django-rest-framework django-views django-urls


    【解决方案1】:

    网址模式:

    path('api/units/<int:id>/', UnitDetailsView.as_view())
    

    views.py

    class UnitDetailsView(APIView):
        http_method_names = ['get']
        permission_classes = (permissions.AllowAny,)
        serializer_class = UnitDetailsSerializer
    
        def get(self, request, **kwargs):
            unit = Unit.objects.get(id=kwargs["id"])
    
            return JsonResponse({
                'id': unit.id,
            }, status=200)
    

    【讨论】:

    • 我已经尝试过了,但是当我到达端点 api/units/:id 时,我得到:``` "OPTIONS /api/units/ HTTP/1.1" 200 0 Not Found: /api/units/ "GET /api/units/ HTTP/1.1" 404 2473 ```
    • 是的,因为您需要从 url 获取 id。你应该访问/api/units/1/
    【解决方案2】:
    urlpatterns:
    path('api/units/<int:id_unit>', UnitDetailsView.as_view())
    

    【讨论】:

    • 根据 OP 的观点,应该是 id_unit 而不是 pk
    • 我已经尝试过这样但我得到一个 404 错误并且可以找到 url
    猜你喜欢
    • 2019-07-22
    • 2016-08-03
    • 2017-09-15
    • 2021-04-12
    • 2021-12-07
    • 1970-01-01
    • 2019-07-23
    • 2020-12-11
    • 2014-09-15
    相关资源
    最近更新 更多