【问题标题】:Django: append URL parameters to a list?Django:将 URL 参数附加到列表中?
【发布时间】:2012-12-19 18:30:32
【问题描述】:

我目前有 /blue 形式的 URL - 每个 URL 都是一种颜色。关联的 URL 模式如下:

 (r'^(?P<colour>\w+)$', 'views.colour')

我想知道是否有可能有看起来像自然语言列表的 URL,长度不确定,用 -or- 分隔:

/blue-or-green-or-yellow

理想情况下,关联的 URL 模式会将每个匹配项附加到 Python 列表中,以便在视图中处理:

 (r'^(?P<colour_list>\w+)(?:-or-(?P<colour_list>\w+))+$', 'views.colour')

在 Django 中有没有办法做到这一点?

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    (?P&lt;colour_list&gt;(\w+(\-or\-)?)+) 这样的东西会得到整个子字符串匹配,然后你可以用-or- 分割

    但是请注意,blue-or- 将是有效匹配,因此您可能希望像这样拆分它:filter(bool, colour_list.split('-or-'))

    【讨论】:

      【解决方案2】:

      试试这个regex:

      (\w+(?:-or-)?)+
      

      或使用字符串拆分:

      result = colours.split("-or-")
      

      【讨论】:

      • re.findall 解决方案只会给出 last 颜色 - 用red-or-blue-green 试试,你会得到["green"]
      【解决方案3】:

      这样的事情会有所帮助:

      采用逗号分隔的颜色

      (r'^(?P<colours>[\w,]+)$', 'views.colour')
      

      然后在视图中:

      colours = colours.split(',')
      

      【讨论】:

      • 我认为你的目标更像是^(?P&lt;colours&gt;[\w,]+)$,注意+的位置
      • @DanielB 是的 + 应该多次出现,只是错过了
      • + 仍在方括号内,这意味着 red+blue,green 将是有效匹配项
      猜你喜欢
      • 2019-07-09
      • 2012-07-04
      • 1970-01-01
      • 2015-04-22
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 2023-03-28
      • 2014-07-01
      相关资源
      最近更新 更多