2016-04-28 14 views
0

私はNoReverseMatchの問題は私のURLに何かを意味することを知っているが、問題はアンNoReverseMatchはエラー

views.pyここで私は見つけることができませんでした:urls.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}) 

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のを取得するために、または逆reverse_lazy使用する必要があります'url – Sayse

+0

これ以外にも、正規表現からスラッシュを削除する必要があります。' r '^ post/$' 'と' r '^ create_subject/$' 'でなければなりません。 – Alasdair

答えて

1

あなたが最も可能性の高いテンプレート内のURLフィルタタグを使用しています。 urlフィルタタグのパラメータとしてpost_idを渡す必要があります。

サイドノートで
{% url 'edit' post_id %} 

、あなたは、好ましくはあなたが `編集にアクセスしようとしているテンプレートの一部を表示する必要が

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

また、 '{form ':form、' post_id ':post_id}'のテンプレートコンテキストに 'post_id'を渡す必要があります。 – Alasdair

+0

ええ、それはとても素晴らしいです!みんなありがとう。しかし、私が理解できることは、なぜそれが最初のところでまだ働くことができるかということです。私はそれをほとんど変えなかった。 – CodeReapper