Django диспетчер URL-адресов вызывает неправильную функцию - PullRequest
1 голос
/ 18 марта 2020

у меня проблема в следующем: я создал новый re_path в своем файле urls.py, но когда я делаю запрос по этому URL, вызывается неправильная функция.

# myapp/urls.py
from django.urls import path, re_path
from . import views as multiplayer_lite_views

urlpatterns = [
    # other paths

    re_path(r'vote/(?P<match_id>\w{16})', multiplayer_lite_views.vote, name='multiplayer_lite_vote'),
    re_path(r'nightvote/(?P<match_id>\w{16})', multiplayer_lite_views.night_vote, name='multiplayer_lite_night_vote'),
    path('new-match/', multiplayer_lite_views.new_match, name='multiplayer_lite_new_match'),
    path('', multiplayer_lite_views.home, name='multiplayer_lite_home'),
]

я просто продублировал строку re_path(r'vote/... и переименовал ее в re_path(r'nightvote/..., но изменил также всю остальную информацию, например multiplayer_lite_views.vote на multiplayer_lite_views.night_vote.

Проблема в том, что когда я go на этот URL nightvote/ вызывается функция vote.

# myapp/views.py

def vote(request, match_id):
    print('vote function')
    # do other stuff
    return return JsonResponse(...)

def night_vote(request, match_id):
    print('nightvote function')
    # do other stuff
    return return JsonResponse(...)

На стороне сервера я вижу следующее:

...
vote function
[18/Mar/2020 10:19:16] "POST /nightvote/gfvkpvhlwlqzosae HTTP/1.1" 200 16
...

PS Я уже пытался закрыть Django и снова открыть, то же самое с кодом.

1 Ответ

1 голос
/ 18 марта 2020

измените ваш URL re_path, как показано ниже:

re_path(r'^vote/(?P<match_id>\w{16})$', multiplayer_lite_views.vote, name='multiplayer_lite_vote'),
re_path(r'^nightvote/(?P<match_id>\w{16})$', multiplayer_lite_views.night_vote, name='multiplayer_lite_night_vote'),

У меня была эта проблема, и это было потому, что ^.

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