我正在构建Django的RESTful API。
一个API有6个参数,它们都有默认值。基本上我希望用户传递0到6对参数,视图函数使用默认休息。并且参数是无序的
例如:
/month/6/date/12/ # for June 12
/year/2012/month/6/ # for June, 2012
/date/12/year/2012/ # for 12 in every month in 2012
我希望这可行,但不能
# in urls.py
url(r'(?:([a-zA-Z]+)/(\d+)/)*','kwargs.views.aview')
# in views.py
def aview(request,*args):
# even in args are keys and odd are values
return HttpResponse(args)
在这一刻,我脑子里只有一个丑陋的解决方案:
# in urls.py
url(r'([\w/]*)','kwargs.views.aview')
# in views.py
def aview(request,args):
args = args.split('/')
# even in args are keys and odd are values
return HttpResponse(args)
有没有优雅的方法呢?
答案 0 :(得分:0)
在你的第一个正则表达式中,你确实只有两个组,它们一直被覆盖。我建议一个不那么难看的解决方案,通过检查正则表达式中url的正确性,但只在一个整个组中,并拆分并将单个参数转换为dict:
url(r'((?:(?:[a-zA-Z]+)/(?:\d+)/)*)','kwargs.views.aview')
def aview(request,args):
args = dict(zip(*[iter(args.split('/'))]*2))
return HttpResponse(args)
编辑:使用正确的reg-exp。