Django 2.0: NoReverseMatch по адресу / url / (/ pledges / group / 7 /) - PullRequest
0 голосов
/ 17 мая 2018

Я только что обновился с Django 1.11 до 2.0.Вот URL-адреса, которые у меня есть для одного приложения Django:

urlpatterns = [
    url(r'^logout/$', views.logout, name='logout'),
    url(r'^$', views.home, name='home'),
    url(r'^pledge/(?P<group_id>[0-9]+)/$',
        views.pledge, name='pledge_by_group'),
    # I have more urls, but I have omitted them since they are not relevant
    url(r'^404/$', views.bad_request, name='404')
]

После обновления я проверил, что все в порядке.Затем я изменил:

url(r'^pledge/(?P<group_id>[0-9]+)/$', views.pledge, name='pledge_by_group')

на:

url('pledge/<int:group_id>/', views.pledge, name='pledge_by_group'),

, чтобы воспользоваться упрощенным синтаксисом маршрутизации URL в Django 2.0.Тем не менее, я получаю следующее сообщение об ошибке при попытке получить доступ к http://localhost:8000/pledges/group/7/:

NoReverseMatch в / pledges / group / 7 / Reverse для 'pledge_by_group' с аргументами ключевого слова '{' group_id ':'7'} 'не найдено.1 шаблон (ов) пробовали: ['pledge //']

Это мое мнение:

@login_required(redirect_field_name='')
def group_pledge(request, group_id):
    """Some docstring..."""
    # Some code that is not relevant to the problem

    context = {
        'pledge_url':  reverse('pledges:pledge_by_group',
                        kwargs={'group_id': group_id}),
    } # context has more values, but for practical reasons I don't include them

    return render(request, 'pledges/home.html', context)

В соответствии с ошибкой проблема заключается в этой строке:

reverse('pledges:pledge_by_group', kwargs={'group_id': group_id})

Может кто-нибудь сказать мне, что происходит и как это исправить?

1 Ответ

0 голосов
/ 17 мая 2018

Новый синтаксис требует использования функции path.Например:

from django.urls import path

...
path('pledge/<group_id>/', views.pledge, name='pledge_by_group'),
...