如何将 URL 的结果作为参数传递?

How to pass the result of an URL as a parameter?

我希望能够处理如下 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]+)+/$'

这在正则表达式中意味着:

'([^/]+/[^/]+)+/$'

在 Django 中,我正在尝试这样做:

'^my-home/travels/search-results/(?P<slug>[a-zA-Z0-9-_]*)/$'

这个url工作正常:

http://mywe/en/my-home/travels/search-results/testtesttest/

当我将 [a-zA-Z0-9-_] 替换为 [.](应该是 "any character")时,它不起作用。我想知道

谢谢!

对于第一个问题,'[.]' 不起作用,因为它不代表任何字符,它代表点。对于任何字符,您应该在 [].

之外使用点

对于第二个问题:你可以用类似的方式定义URL,但是你不能捕获重复组的所有匹配项,它只会捕获最后一个。那是正则表达式的限制。

但我为您提供了 2 种可能的解决方案:

  1. 在一个捕获组(例如.*)中捕获搜索结果后到 urlpattern 末尾的所有内容,并在您的视图中对其进行解析以提取每个可能的值
  2. 在指向该视图的 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
    ]))