问题描述
我正在尝试从视图中的以下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)