Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何将URL的结果作为参数传递?_Regex_Django_Django Urls - Fatal编程技术网

Regex 如何将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

我希望能够处理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]+/[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中定义多个指向该视图的模式。它们甚至可以有相同的名称,例如:

    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
    ]))