Django 2.0: NoReverseMatch at /url/ (/pledges/group/7/)



我刚刚从Django 1.11升级到2.0。这些是我有一个 Django 应用程序的 url:

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'),

为了利用 Django 2.0 中简化的 URL 路由语法。但是,当我尝试访问http://localhost:8000/pledges/group/7/时,我收到以下错误:

NoReverseMatch at/pledges/group/7/对于带有关键字参数"{group_id"的"pledge_by_group",则相反:找不到"7"}。尝试了 1 种模式: ['承诺//']

这是我的观点:

@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})

有人可以告诉我发生了什么以及如何解决它吗?

新语法需要使用path函数。例如:

from django.urls import path
...
path('pledge/<group_id>/', views.pledge, name='pledge_by_group'),

最新更新