【问题标题】:Django urlpattern with infinite number of parameters具有无限数量参数的 Django urlpattern
【发布时间】:2016-02-06 21:58:22
【问题描述】:

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

假设我想创建一个页面,该页面从 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')。让所有数字通过视图的正确正则表达式是什么?

【问题讨论】:

  • 为什么不以 GET 格式传递参数? -> /sum/?nums=[1,2,3,4,5,6,7]

标签: python django python-3.x url-pattern


【解决方案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]
    ...

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2016-01-13
      • 1970-01-01
      • 2011-01-27
      相关资源
      最近更新 更多