2016-04-28 2 views
0

Я знаю, что проблема NoReverseMatch означает что-то не так с моим URL,, но я просто не мог найти, где проблема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()) 
+3

Вы должны показать часть шаблона, который пытается получить доступ к 'редактировать 'url – Sayse

+0

Как в сторону, вы должны удалить ведущую косую черту из своих регулярных выражений, она должна быть' r '^ post/$' 'и' r '^ create_subject/$' '. – Alasdair

ответ

1

Вы, скорее всего, с помощью фильтра URL тега в шаблоне. Вам необходимо передать post_id в качестве параметра в тэге фильтра URL.

{% url 'edit' post_id %} 

На стороне записки, вы должны предпочтительно использовать реверс или reverse_lazy, чтобы получить URL, а не жесткого кодирования их

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

Вам также нужно передать 'post_id' в контекст шаблона i.e.' {'form': form, 'post_id': post_id} '. – Alasdair

+0

Да, это так здорово! Спасибо вам, ребята. Но я понимаю, почему он все еще может работать в первую очередь? Я почти ничего не изменил. – CodeReapper

Смежные вопросы