Django NoReverseMatch错误求助:updatecontact路由无参数匹配失败
Hey there, let's break down this NoReverseMatch error you're seeing. The message is pretty clear: your updatecontact URL pattern expects an id parameter (that's what the (?P<id>\d+) part means), but somewhere in your code you're trying to generate this URL without passing that required id.
Here's how to fix it:
1. Update your template to use Django's URL template tag (instead of hardcoding)
Right now you have a hardcoded URL in your template:
<td><a href="/updatecontact/{{a.id}}/">Update</a></td>
While this might work, it's better practice to use Django's {% url %} tag, which handles URL reversing properly. More importantly, if you accidentally used {% url 'updatecontact' %} without the id parameter somewhere else in your template, that's definitely causing the error. Replace your link with this:
<td><a href="{% url 'updatecontact' a.id %}">Update</a></td>
This tells Django to generate the URL for updatecontact and pass in a.id as the required id parameter.
2. Check your views for missing parameters in reverse/redirect calls
If you're using reverse() or redirect() in your views to point to the updatecontact URL, you need to include the id parameter there too. For example:
- Using
reverse()with positional arguments:from django.urls import reverse # In your view redirect_url = reverse('updatecontact', args=[your_contact_id]) return redirect(redirect_url) - Or using keyword arguments (matches the
(?P<id>\d+)in your URL pattern):redirect_url = reverse('updatecontact', kwargs={'id': your_contact_id}) return redirect(redirect_url) - You can also pass the parameter directly to
redirect():return redirect('updatecontact', id=your_contact_id)
3. Double-check your URL pattern
Your existing URL pattern in urls.py is correct:
url(r'updatecontact/(?P<id>\d+)/$',views.updatecontact,name="updatecontact"),
Just make sure you're using the exact name updatecontact when reversing (no typos!) and that the parameter name id matches what you're passing in your template/views.
The core issue here is that every time you reference the updatecontact URL (whether in a template or view), you must provide the id parameter that the URL pattern requires. Once you fix all places where you're missing that parameter, the NoReverseMatch error should disappear.
内容的提问来源于stack exchange,提问作者saum

