【问题标题】:django dynamic number of named groups in urldjango url中命名组的动态数量
【发布时间】:2012-05-18 06:50:39
【问题描述】:

我想开发一个带有动态网址的网络服务。

具有命名组的常见 url 模式是这样的:

(r'^articles/(?P<year>\d{4})/(?P<month>\d{2})/$', 'news.views.month_archive')

出于我的目的,我需要更多动态,因为我从一开始就不知道组的数量。

例如可能的网址可能是:

  • 文章/帖子/cmets
  • 文章/帖子/作者
  • 文章/帖子/ ...

我可以使用这样的东西:

(r'^(?P<cat1>)/(?P<cat2>)/$', 'module.views.function')
(r'^(?P<cat1>)/(?P<cat2>)/(?P<cat3>)/$', 'module.views.function')
(r'^(?P<cat1>)/(?P<cat2>)/(?P<cat3>)/(?P<cat4>)/$', 'module.views.function')

.. 等等。有没有更聪明的方法来做到这一点?提前致谢!

【问题讨论】:

  • 这让我很感兴趣,我之前就想要它,但从来没有想出一个好的解决方案

标签: regex django url-pattern


【解决方案1】:

等一下,如果您只有 1 篇文章,那么您希望它是 article/post/,否则您希望它是 articles/post/

由于 URL 只是正则表达式,您可以执行类似的操作

(r'^articles?/post/$', 'some_view')

? 测试 s 的 0 或 1。

但基本上你的网址似乎没有意义,当你写articles/post/comments时,听起来你想在所有文章上发布cmets?与article/post/ 相同,这是什么意思?您要发布哪篇文章(您只有一篇,最多一篇)?

通常 URL 看起来像 articles/5/post/comments,这意味着“我想在 pk 为 5 的文章上发布 cmets”。

对不起,如果我的回答没有帮助。我想我并没有真正理解你的问题。

【讨论】:

  • 抱歉,我的示例网址具有误导性。问题更笼统,它与文章或帖子无关,它与如果斜线(命名组)的数量未知,如何提取斜线之间的信息有关。
  • 你试过(r'(?P&lt;match&gt;\w+)'吗(注意缺少的^$)?但我不确定视图是否可以为匹配的命名正则表达式组列出一个列表。如果这不起作用,请尝试 (r'^(?&lt;match&gt;.+)$'(匹配整个 URL)并将 match 拆分为 /
猜你喜欢
  • 2013-05-09
  • 2019-08-22
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 2018-07-22
  • 2017-11-06
相关资源
最近更新 更多