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

时间:2015-03-10 15:12:49

标签: python regex django django-urls

我在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是整数。

具有类似网址结构的此类案例的网址格式应该是什么?

1 个答案:

答案 0 :(得分: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'),