繁体   English   中英

Django:匹配urlconf中一组关键字正则表达式中的一个或多个

[英]Django: match one or more from a set of keyworded regular expressions in an urlconf

我有一个采用三个可选关键字参数的Django视图。 我想处理正则表达式以将可能的URL匹配到此视图中的一行。 我想很好地构造网址。

一个例子:我可能的参数是start,它是一个int,serial是一个长度为13的字符串,end是另一个int。

网址可能看起来像:

/main/s20130509/e20130510/ABC1234567890
or
/main/s20130509/e20130510/
or 
/main/ABC1234567890

其中以e和s为前缀的组件分别是end和start,而ABC1234567890是串行的。

我想拉这些末端,开始,序列值,并将它们作为值start = s20130509传递给视图,等等。

现在,我正在通过在单独的行上详尽列出排列的方式来执行此操作,看来必须有更好的方法。

我正在尝试做类似的事情:

url(r'^base_url/(?P<serial>[^/]{13}|(?P<end>e\d{8})|(?P<start>s\d{8})/*$', view_method),

基本上,我想做什么的逻辑对我来说很清楚。 我想提取三个匹配项中的任何一个的所有实例,并将它们作为关键字参数传递,但是我找不到资源来找出适合的ReGex语法。

有什么想法吗? 我很高兴做任何能优雅完成工作的事情。

谢谢你的时间,

提姆

您想要的是:

url(r'^base_url/(?P<serial>[^/]{13}/$', view_method),

通过添加可选组的endstart kwargs,所以:

# Optional, non-capturing group surrounding the named group for each (so you don't have to capture the slashes or the "e" or "s"
(?:e(?P<end>\d{8})/)

然后,以任一顺序最多允许其中两个:

((?:s(?P<start>\d{8})/)|(?:e(?P<end>\d{8})/)){0,2}

结果是:

url(r'^base_url/((?:s(?P<start>\d{8})/)|(?:e(?P<end>\d{8})/)){0,2}(?P<serial>[^/]{13})/$', view_method),

免责声明,我是在此框中写的,所以花一点时间来测试它并更新答案(如果不正确)。

更新:

确实,它起作用了:)我匹配了以下内容:

http://127.0.0.1:8080/base_url/e77777777/s88888888/1234567890123/
http://127.0.0.1:8080/base_url/s88888888/e77777777/1234567890123/
http://127.0.0.1:8080/base_url/s88888888/1234567890123/
http://127.0.0.1:8080/base_url/e77777777/1234567890123/
http://127.0.0.1:8080/base_url/1234567890123/

kwarg看起来像这样(在所有三个段都被请求时,从View的子类的get方法中引发了一个例外-结束时,end和/或start为None ):

{'start': u'88888888', 'serial': u'1234567890123', 'end': u'77777777'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM