URLconf не работает с похожими URL - PullRequest
1 голос
/ 16 марта 2012

Вот мой URLconf:

urlpatterns = patterns('',
    url(r'^new_player/$', new_player, name="new_player"),
    url(r'^new_player/player_added/$', player_added, name="player_added"),
    url(r'^(\d+)/new_avatar/$', new_avatar, name='new_avatar' ),
    url(r'^(?P<user_name>[-\w]+)/new_game/$', new_game, name='new_game' ),
    url(r'^$', 'django.views.generic.list_detail.object_list', { 'queryset': Player.objects.all(),'extra_context': {'players' : Player.objects.annotate(total_amount_won=Sum('avatar__games__profit'))}}, 'stakeme_player_list'),
    url(r'^(?P<real_name>[\w|\W]+)/', usernames_by_player),
    url(r'^(?P<user_name>[\w|\W]+)/', avatars_by_username),
)

Как написано выше, url(r'^(?P<real_name>[\w|\W]+)/', usernames_by_player), отобразит связанный с ним шаблон, но url(r'^(?P<user_name>[\w|\W]+)/', avatars_by_username), будет 404.

Если я переверну порядокпоследние два URL, 404 будет отображаться для usernames_by_player вместо avatars_by_username

Я могу видеть, как из-за похожих шаблонов URL это может вызвать проблему, но кто-то может объяснить, почему и как решить, пожалуйста

1 Ответ

2 голосов
/ 16 марта 2012

Эти URL-адреса ищутся в том порядке, в котором вы их определили.Таким образом, эта строка url(r'^(?P<real_name>[\w|\W]+)/', usernames_by_player) захватывает весь ввод с URL-адреса запроса.Вы должны различать эти URL-адреса как:

url(r'^realname/(?P<real_name>[\w|\W]+)/', usernames_by_player),
url(r'^username/(?P<user_name>[\w|\W]+)/', avatars_by_username),

Надеюсь, это ведет в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...