【问题标题】:Advanced URLs in DjangoDjango 中的高级 URL
【发布时间】:2016-11-06 07:13:09
【问题描述】:

任务是写两个url模式。

第一个将采用单个参数<path>,可以是任意深度的任意 url:

test/dorogi/

test/foo/bar/as/deep/as/you/want

第二个与第一个相同,但最后有一个数字。

test/dorogi/1/

它涉及两个参数:<path><pk>。最后一个是数字。


我为第一个模式做了一个解决方案:

url(r'^(?P<path>.*)/', mptt_urls.view(model='activities.models.Category', view='activities.views.category',
                                         slug_field='slug'), name='activities'),

但是我如何制作第二个并防止它们之间发生任何冲突?

应该是这样的:

url(r'^...', views.ArticleDetailView.as_view(), name='article-detail'),

【问题讨论】:

  • 只需添加这个正则表达式:'(?P)(/\w+/?)+' 匹配第一个,但应该在 url 顺序中排在第二位。第二个更严格:'(?P).*(/[0-9]+/?)$'

标签: python django url django-urls django-mptt


【解决方案1】:

只需将第二个参数添加到第一个模式的正则表达式中:

r'^(?P<path>.*)/(?P<pk>\d+)/$'

但请确保将其放在 之前 您的 URL 列表中的第一个。

(请注意,您绝对应该使用 $ 来终止您的模式,就像我在上面所做的那样。)

【讨论】:

  • 是的。但是我的网址看起来像/articles/news/regional//4058/。注意pk之前的双斜线?
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
  • 2021-10-28
  • 2012-10-19
  • 2015-12-09
  • 2023-04-08
相关资源
最近更新 更多