具有无限数量参数的Django urlpattern

Django urlpattern with infinite number of parameters

是否可以定义 Django url模式,它可以获取任意数量的相同类型参数并将它们传递给视图?

假设我想创建一个页面,从 url 获取数字列表并对它们求和。所以这些都是有效的 urls:

/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/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]
    ...

Django 的 urlpatterns 基于 python 的正则表达式,因此无法从重复组中捕获所有数据。检查此 以获得解释。

你必须自己拆分和处理它们(就像@Alasdair 建议的那样)。