【问题标题】:Incorrect Django URL pattern match for 2 views with the same URL structure?具有相同 URL 结构的 2 个视图的 Django URL 模式匹配不正确?
【发布时间】:2015-05-12 02:32:24
【问题描述】:

我在 Django 中有两个 url 模式:

urlpatterns += patterns('',
    url(r'^(?P<song_name>.+)-(?P<dj_slug>.+)-(?P<song_id>.+)/$', songs.dj_song, name='dj_song'),
    url(r'^(?P<song_name>.+)-(?P<artist_slug>.+)-(?P<song_id>.+)/$', songs.trending_song, name='trending_song'),
)

当我访问第一个模式的 URL 时,它会正确打开它。但是,如果我尝试访问第二种模式的 URL,它会尝试再次访问第一个视图。变量song_namedj_slugartist_slug是字符串,song_id是整数。

对于这种具有类似 URL 结构的案例,应该采用什么 URL 模式?

【问题讨论】:

  • 您尝试访问视图的示例 url 会很有用 - 也许您会首先意识到哪里出了问题 :)

标签: python regex django django-urls


【解决方案1】:

两个网址都使用相同的正则表达式。我删除了组名并得到:

url(r'^(.+)-(.+)-(.+)/$', songs.dj_song, name='dj_song'),
url(r'^(.+)-(.+)-(.+)/$', songs.trending_song, name='trending_song'),

当然 django 使用第一个匹配项。

您应该为不同的视图使用不同的网址。例如将前缀添加到第二个 url:

url(r'^trending/(?P<song_name>.+)-(?P<artist_slug>.+)-(?P<song_id>.+)/$',
                                  songs.trending_song, name='trending_song'),

【讨论】:

  • 所以不可能对 2 个不同的视图使用相同的 URL 模式?
  • 是的,这是不可能的。 Yesterday-Beatles-123 - 这是流行歌曲的DJ歌曲吗? :-)
猜你喜欢
  • 2017-08-02
  • 2017-04-25
  • 2021-08-24
  • 2017-02-22
  • 1970-01-01
  • 2021-06-21
  • 2018-03-23
  • 2011-06-11
  • 2019-04-04
相关资源
最近更新 更多