[英]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),
通过添加可选组的end
和start
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.