无法在URL中访问Django查询字符串参数

问题描述

我正在尝试从视图中的以下URL访问category键:

...users/8/Feed?category='x'

但是,当我在视图中运行self.kwargs时,它仅返回'user_id': 8

文件urls.py

path('users/<int:user_id>/Feed',views.Posts.as_view())

文件views.py

class Posts(APIView):
    def get(self,request,**kwargs):
        return Response(self.kwargs)

我将如何更改以使self.kwargs返回"user_id": 8,"category": 'x'而不只是"user_id": 8

很重要的一点是,使用“?”将其保留为查询字符串参数。另外,我已经看到其他人使用self.request.GET实现类似的事情,使用此方法self.kwargs有什么区别?

解决方法

在Django视图中,self.kwargs保存URL参数(URL conf中指定的部分,如代码中的<int:user_id>),而self.request.GET保存查询字符串参数( ?之后的部分

要从两者获取数据:

class Posts(APIView):
    def get(self,request,**kwargs):
        print(self.kwargs['user_id'])

        # this returns None if there was no category specified
        print(self.request.GET.get('category'))

        new_d = {
            'user_id': self.kwargs['user_id'],'category': self.request.GET.get('category'),}
        return Response(new_d)