Regex 如何将URL的结果作为参数传递?
我希望能够处理URL,如:Regex 如何将URL的结果作为参数传递?,regex,django,django-urls,Regex,Django,Django Urls,我希望能够处理URL,如: 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]+/[w
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-_]*)/$'
当我用[.]
(应该是“任何字符”)替换[a-zA-Z0-9-]
时,它不起作用。我想知道
- 1-为什么它不起作用
- 2-regexp“Django方式”的作用是什么
谢谢大家! 对于第一个问题,
“[.]”
不起作用,因为它不表示任何字符,而是表示点。对于任何字符,都应使用[]
之外的点
对于第二个问题:可以用类似的方式定义URL,但不能捕获重复组的所有匹配项,它将只捕获最后一个。这就是正则表达式的局限性
但我有两种可能的解决方案:
*
)中捕获搜索结果之后的所有内容,并在视图中解析这些内容以提取所有可能的值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
]))
为什么不使用正确标识为解决方案的regexp呢?没有Django特定的方法来执行regexp。
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
]))