我正在使用Django 1.7和Django REST Framework 2.4.3。我的端点看起来像/items/{pk}/notify
,使用UpdateAPIView
可以很好地工作。我正在尝试将多个查询参数传递给此URL,但我似乎只能得到第一个参数。 URL中的任何后续参数都将提交。我四处搜索,发现Django有一个QueryDict
,然后我继续使用lists
获取所有值。不幸的是,这不起作用。
这就是我所拥有的 -
class Notify(generics.UpdateAPIView):
queryset = Item.objects.all()
serializer_class = ItemSerializer
def update(request, *args, **kwargs):
print('request: %s', request)
print('args: %s' % args)
print('kwargs: %s' % kwargs)
return Response(data='123')
我正在通过curl -X PATCH 127.0.0.1:8000/items/notify/?ticket_no=123&foo=bar
进行测试。奇怪的是,本地Django服务器没有记录完整的URL。我只看到[02/Oct/2014 08:52:03] "PATCH /items/1234/notify/?ticket_no=123 HTTP/1.1" 200 5
。
如何访问所有网址参数?
答案 0 :(得分:1)
这不是Django的问题,这是你的curl命令的问题。您需要将url放在引号中,因为&
是一个由shell专门处理的元字符。
curl -X PATCH '127.0.0.1:8000/items/notify/?ticket_no=123&foo=bar'
如果没有引号,&
会告诉shell在后台运行命令,然后转到下一个命令。因此shell运行两个单独的命令,并且只有第一个get参数包含在url中。
curl -X PATCH 127.0.0.1:8000/items/notify/?ticket_no=123
foo=bar