Django URL 正则表达式包含正斜杠

Django URL regex to include forward slashes

我在创建允许所有字符(包括正斜杠)的 Django URL 正则表达式时遇到问题。更具体地说,我遇到的问题是区分 URL args 中使用的正斜杠和 URL 中用作定界符的正斜杠。

示例:

我有一个 URL 看起来像这样: localhost:8000/jfe/customer/customerNumb/invoice2/portfolio/

这包含 3 个 URL 个参数: customerNumb, 发票2, 投资组合。

我的目标是使参数 2 可以包含特殊字符,包括“/”,因此第二个参数可以类似于 "KJ 02/2017"(不带引号)。

示例: localhost:8000/jfe/customer/customerNumb/KJ 02/2017/组合/

在使用 "KJ 02/2017" 的示例中,我无法区分 "KJ 02/2017" 中的“/”和分隔 arg2 和 arg3 的“/”。

我的正则表达式:

url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>[^/]+)/$')
url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>[^/]+)/(?P<portfolio>[^/]+)/$')

我也试过了

url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>.+)/$')
url(r'^customer/(?P<customer_number>[0-9]+)/(?P<invoice>.+)/(?P<portfolio>[^/]+)/$')

如果我对 URL 进行编码:

示例:localhost:8000/jfe/customer/customerNumb/KJ%2002%2F2017/portfolio/ 正则表达式将像这样解析它:

arg1: customerNumb, arg2:KJ%2002%2F2017/投资组合/

当我想要的时候:

arg1: 客户编号 arg2:KJ%2002%2F2017 arg3: 投资组合

有人可以帮助我了解我在正则表达式中搞砸的地方吗?或者让我知道是否可以在 url 参数中包含“/”?

谢谢

编辑: 有人指出我的第二次尝试有效,这是真的,但我想提一下 Django 似乎在将 URL 传递给正则表达式之前对其进行解码。结果,正则表达式将其视为:

localhost:8000/jfe/customer/customerNumb/KJ 02/2017/组合/

这应该有效:

"/[0-9]+(?:-|.|\/)+[a-zA-Z]+(?:-|.|\/)+[0-9]/"

我无法弄清楚如何创建一个正则表达式来捕获带有“/”的参数。为了解决这个问题,我对参数进行了双重编码,这样当转到 URL 调度程序时它就不会被完全解码。