我希望能够处理以下网址:
http://mywe/en/my-home/travels/search-results/age-min/18/
http://mywe/en/my-home/travels/search-results/age-min/18/age-max/50/
http://mywe/en/my-home/travels/search-results/town/acapulco
等等,所以它总是遵循这种模式
'([whatever until a slash]+/[whatever until a slash]+)+/$'
这意味着在regexp:
'([^/]+/[^/]+)+/$'
在Django,我试着这样做:
'^my-home/travels/search-results/(?P<slug>[a-zA-Z0-9-_]*)/$'
此网址正常:
http://mywe/en/my-home/travels/search-results/testtesttest/
当我将[a-zA-Z0-9-_]
替换为[.]
(应该是&#34;任何字符&#34;)时它不起作用。我想知道
'([^/]+/[^/]+)+/$'
谢谢!
答案 0 :(得分:0)
对于第一个问题,'[.]'
不起作用,因为它并不意味着任何字符,它意味着点。对于任何字符,您应该使用[]
之外的点。
对于第二个问题:您可以以类似的方式定义URL,但是您不能捕获重复组的所有匹配,它只会捕获最后一个。这是正则表达式的限制。
但我有2个可能的解决方案:
.*
)中的urlpattern的末尾,并在视图中解析该内容以提取每个可能的值在您的网址中定义多个指向该视图的模式。它们甚至可以具有相同的名称,例如:
url(r'^/en/my-home/travels/search-results/([^/]+)/([^/]+)/$', your_view, name="your_url_name"),
url(r'^/en/my-home/travels/search-results/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$', your_view, name="your_url_name"),
url(r'^/en/my-home/travels/search-results/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/]+)/$', your_view, name="your_url_name"),
你甚至可以用一点循环来帮助自己:
url(r'^/en/my-home/travels/search-results/', include([
url('^' + '([^/]+)/([^/]+)/' * (i + 1) + '$', your_view, name="your_url_name"),
for i in range(10) # how many maximum parameters you want to catch
]))