2017-02-26 2 views
0

:ビューでDjangoのフォームのPOST HTMLで

<form role="form" method="post" action="{% url 'myapp:add_review' %}" enctype="multipart/form-data"> 
    {% csrf_token %} 
    <div class="form-group"> 
     <div class="col-sm-10"> 
      <input id="review" name="review" type="text"> 
     </div> 
    </div> 
    <button type="submit" class="btn btn-default"> Submit </button> 
</form> 

app_name = 'myapp' 
urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 

    # register, login, logout 
    url(r'^register/$', views.UserFormView.as_view(), name='register'), 
    url(r'^login/$', views.login_user, name='login'), 
    url(r'^logout/$', views.logout_user, name='logout'), 

    # individual article page 
    url(r'^(?P<item_id>[0-9]+)/$', views.single_item, name='single_item'), 
    url(r'^(?P<item_id>[0-9]+)/add_review/$', views.add_review, name='add_review'), 
] 

本当に基本的なものurls.py

def add_reviews(request): 
    if request.method == "POST": 
     print "Post is here:", request.POST['review'] 
     return render(request, 'myapp/single_item.html') 
     //or this?? return redirect('myapp:single_item') 

、個々の商品ページでは、私は各項目のレビューを書いて投稿し、同じ項目のページに戻るフォームが必要です。

私は、個々の商品ページにいるよ、私は次のエラーを与える:

一般
Reverse for 'add_review' with arguments '('',)' and keyword arguments '{}' not found. 
1 pattern(s) tried: ['(?P<item_id>[0-9]+)/add_review/$'] 

答えて

1

、この種のエラーは、このようなパターンが見つからなかったことを、何かがURLと右ではないことを示していますいくつかのパラメータなどが欠落していることを示します。この特定のエラーから、あなたはURLマッチャーにitem_idを渡していないようです。したがって、Djangoは適切なURLを見つけることができません。あなたは持っている:あなたはこのURLを解決することにしたいときにいつでもitem_idを提供しなければならないことを意味しており、?P<item_id>[0-9]+)/...を書いた

url(r'^(?P<item_id>[0-9]+)/add_review/$', views.add_review, name='add_review') 

お知らせ。キーワード引数としてitem_idを追加してみてください:

<form role="form" method="post" action="{% url 'myapp:add_review' item_id= ... %}" enctype="multipart/form-data"> 

これは、ジャンゴによって認識されるべき有効なURL(例えば、.../1/add_review/)を構築すべきです。しかし、あなたのadd_review()関数もitem_id引数を取る必要があります。そうしないと、予期しない関数引数のためにTypeErrorが返されることがあります。

戻り値は、正常にPOSTした後にリダイレクトする場合は、renderの代わりにredirectを使用します。 item_idを渡す必要があるかもしれませんが、URLの設定では次のように指定されています:a)URLはitem_idで、b)single_item()item_idである必要があります。このような何か作業をする必要があります:single_item(request, item_id)

def add_review(request, item_id): 
    ... 
    return redirect('myapp:single_item', {'item_id': item_id}) 

そしてsingle_itemの署名はこのようなものでなければなりません。

+1

私はそれが何かidの部分で間違っていることを知っていた、どこでどのように把握できませんでした。詳細な説明をいただきありがとうございます、今私には完全に意味があります。 – viviwill

関連する問題