2015-11-05 19 views
2

是否可以定义Django urlpattern,它可以获取任意数量的相同类型参数并将它们传递给视图?具有无限参数数量的Django urlpattern

可以说我想创建一个页面,它从url获取数字列表并将它们相加。因此,这些将是有效的URL:

/sum/10/99/12/ 
/sum/1/2/3/4/5/6/7/8/9/ 
/sum/3/ 

我想这个观点看起来是这样的:

def sum_view(request, *args): 
    return render(request, 'sum.html', {'result': sum(args)}) 

问题是应该怎么URLPATTERN是什么样子?也许是这样的:

url(r'^sum/((\d+)/)+$', views.sum_view) 

但这样观点仅得到最后一个号码重复两次:args == ('1/', '1')。什么是正确的正则表达式来获取所有通过视图的数字?

+1

为什么你不通过GET格式的参数? - >'/ sum /?nums = [1,2,3,4,5,6,7]' – Gocht

回答

4

您可以捕获单个参数,例如'1/2/3/4/5/6/7/8/9/'

url(r'^sum/(?P<numbers>[\d/]+)$', views.sum_view) 

在视图中拆分列表。

def sum_view(request, numbers): 
    processed_numbers = [int(x) for x in number.split('/') if x] 
    ... 
1

Django的URL模式是基于Python的正则表达式,所以没有从重复组捕获所有数据的方式。请查看question以获取解释。

你将不得不自己拆分和处理它们(如@Alasdair建议)。