无法构建包含3个参数的网址。 没有在网络中找到任何适当的现有示例。
routers.py
router = routers.SimpleRouter()
router.register(r'reservation(?P<param1>)', ReservationViewSet, 'reservation')
这适用于一个参数。 添加两个参数以解析URL的正确语法是什么:
http://127.0.0.1:8000/api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016
谢谢!
答案 0 :(得分:1)
简而言之,我建议您选择一种或另一种方式,而不是将GET参数与URL结构混合。
如果您使用/api/general/reservation?enterprise=4&start=01-01-2015&end=01-31-2016
这样path[?query]
,则可以使用以下格式撰写您的URI:/api/general/reservation
,路径为?enterprise=4&start=01-01-2015&end=01-31-2016
,查询为{{ 1}},这是可选的,位于路径之后。
要获取这些参数,您需要从请求中读取其值,例如enterprise = request.GET['enterprise']
因此,如果您想保留该结构,请在ViewSet中阅读这些参数,并查看您的视图方法
def do_something(request):
# read the params first
enterprise = request.GET['enterprise']
...
# do something with those values
要使用此方案并匹配路径,只需按此路由
即可router.register(r'reservation', ReservationViewSet, 'reservation')
(没有必要使用r'reservation(?P<param>)'
,查询不是路径的一部分,所以不包含它)
否则,如果您尝试直接从网址解析这些内容,例如使用网址正则表达式,那么您需要一个更像此/api/general/reservation/4/01-01-2015/01-31-2016
的表单,以便与此结构reservation/(?P<enterprise>)/(?P<start>)/(?P<end>)
匹配
然后你的view方法看起来像
def do_something(request, enterprise, start, end):
# do something with those values