NoReverseMatch错误

时间:2016-04-28 15:00:16

标签: python django

我知道NoReverseMatch问题意味着我的网址有问题,但我找不到问题所在

views.py:

def edit(request,post_id):
e = Note.objects.get(id=post_id)
form = Edit()
if request.method == 'POST':
    form = Edit(request.POST.copy())
    if form.is_valid():
        data1 = form.cleaned_data
        g = Note.objects.get(id=post_id)
        g.title = data1['title']
        g.content = data1['content']
        g.category = data1['category']
        g.subject_name = data1['subject_name']
        g.save()
        return HttpResponseRedirect('/notebook/')
    else:
        return HttpResponse('Not good')
else:
    form = Edit(initial={'title': e.title,'content': e.content, 'category' : e.category,
                         'subject_name': e.subject_name})
return render(request,'notebook/edit.html',{'form': form})
在urls.py中

urlpatterns = [
url(r'^$', views.homepage, name='homepage'),
url(r'^(?P<post_id>[0-9]+)/$', views.detail, name='detail'),
url(r'^(?P<post_id>[0-9]+)/delete/$', views.delete, name='delete'),
url(r'^edit/(?P<post_id>[0-9]+)/$', views.edit, name='edit'),
url(r'^/post/$', views.post, name='post'),
url(r'^category(?P<category>\w+)/$', views.show_category, name='show_category'),
url(r'^subject(?P<id>\w+)/$', views.show_subject, name='show_subject'),
url(r'^/create_subject/$', views.create_subject, name='create_subject'),
# url(r'/upload_image/$', views.upload_image, name='upload_image'),
]

错误:

Reverse for 'edit' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['notebook/edit/(?P<post_id>[0-9]+)/$']

顺便说一句,我必须说这个,我认为这很重要,在我添加类Subject之前,这意味着表单首先与它无关,函数edit()工作得很好。 此外,我的表单部分看起来像这样:

class Edit(forms.Form):

title = forms.CharField(label=('title')
content = forms.CharField(label=('content'),widget=forms.Textarea)
category = forms.CharField(label=('category')
subject_name = forms.ModelChoiceField(queryset=Subject.objects.all())

1 个答案:

答案 0 :(得分:1)

您最有可能在模板中使用网址过滤器标记。您需要将post_id作为参数传递到您的网址过滤器标记中。

{%  url 'edit' post_id %}

另一方面,您最好使用reverse或reverse_lazy来获取网址而不是硬编码

from django.core.urlresolvers import reverse_lazy, reverse
HttpResponseRedirect(reverse('url_name'))