具有无限数量参数的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 建议的那样)。
是否可以定义 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 建议的那样)。