2016-10-07 13 views
0

djangoで可変フォームを作成しようとしていますが、 が正しく動作していないようです。フォーム値の代わりにトークンを表示してくれることを願っています。Django Python、フォームにcsrfトークンが表示されます

enter image description here

私を助けてください!

url。

url(r'^test', views.test), 

ビューです。

def test(request): 
    if request.method == "POST": 
     for key, value in request.POST.items(): 
      response = '%s %s' % (key, value) 

     return HttpResponse(response) 




    return render(request, 'datos2.html') 

datos2。

<form action="/test" method="post"> {% csrf_token %} 
<input type="text" name="eee"> 
<input type="submit"> 
</form> 


<p>ADD VALUE</p> 

<button onclick="myFunction()">ADD</button> 

<script> 
function myFunction() { 
    var x = document.createElement("INPUT"); 
    x.setAttribute("type", "text"); 
    x.setAttribute("value", "0"); 
    x.setAttribute("name", "eee"); 
    document.body.appendChild(x); 
} 
</script> 

enter image description here

enter image description here

enter image description here

私を助けてください!

答えて

0

フォームから値を取得するには、リクエストオブジェクトから値を取得し、レンダリングされたテンプレートの一部としてコンテキストの形式で返す必要があります。ここにあなたのコードは、現在達成するもの:POST辞書から変数の応答値にリクエストの

チェック方法

if request.method == "POST": 

の割り当てが、結果として、結果は最後の項目であるので、辞書内の次の値は、前のものを上書きしますPOSTディクショナリのcsrfトークン値

for key, value in request.POST.items(): 
      response = '%s %s' % (key, value) 

ここでは、レスポンス変数に含まれるものがhttp応答として返されます。このステップでは、テンプレートをレンダリングしません。変数の内容を応答として返します。

return HttpResponse(response) 

そして、その結果として、実行フローは、このステートメントに到達することはありません:

return render(request, 'datos2.html') 

これはそれです。

私はあなたが正しく質問しているかどうか分かりませんが、postメソッドを使用すると、フォームから値を受け取りたいということです。

if 'name_of_your_html_input_field' in request.POST: 
        result=request.POST.get('name_of_your_html_input_field') 
return render(request, "template_name.html", {'data':result}) 

そして、あなたがすべきテンプレートで: どこか{{data}}を入れて、あなたはこのようにそれを行うことができます。

0

csrfmiddlewaretokenは、フォームの値です。ループにresponseを設定するたびに、以前の値が上書きされます。あなたの場合、はrequest.POST.items()の最後の項目ですので、これが唯一の結果です。

for key, value in request.POST.items(): 
     response = '%s %s' % (key, value) 

代わりに、文字列を作成して最後に返すことができます。次に、すべての値がrequest.POSTに表示されます。

response = '' 
    for key, value in request.POST.items(): 
     response += '%s %s<br>' % (key, value) 

    return HttpResponse(response) 

注意、あなたはすべてのフォームフィールドの値を示しているので、これはまだ、CSRFトークンが表示され、CSRFトークンが非表示のフォームフィールドです。ミドルウェアトークンを表示したくない場合は、キー値をチェックして除外することができます。

response = '' 
    for key, value in request.POST.items(): 
     if key != 'csrfmiddlwaretoken' 
      response += '%s %s\n' % (key, value) 

    return HttpResponse(response) 
関連する問題