具有相同 URL 结构的 2 个视图的 Django URL 模式匹配不正确?

Incorrect Django URL pattern match for 2 views with the same URL structure?

我在 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 使用相同的正则表达式。我删除了组名并得到:

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

django当然使用第一个匹配。

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

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