2012-05-03 8 views
1

私はデータベースフィールドの内容を表示するテキストベースのウェブサイトをdjangoベースのWebサイトに持っています。 私はこのフィールドを編集し、データベースのフィールドを更新する関数にそれを提出できるようにしたいと思います。URLを変更せずにDjangoページにフォームを送信

私はviews.pyで関数を呼び出す方法を知っています。次に、render_to_responseを使ってクエリの結果を新しいWebページに返します。

要約すると、別のURLを参照する必要なく、html形式を使用してdjango/pythonスクリプトの関数をどのように扱いますか?

答えて

2

通常、例えばPost/Redirect/Getパターン、使用することをお勧めします:

def myview(request, **kwargs): 

    if request.POST: 
     # validate the post data 

     if valid: 
      # save and redirect to another url 
      return HttpResponseRedirect(...) 
     else: 
      # render the view with partial data/error message 


    if request.GET: 
     # render the view 

     return render_to_response(...)  
+0

右 - POSTが無効である場合、あなたは再レンダリングすることを確認したいのに部分データを含むビュー – Dougal

+0

@Dougal、良い点 - 私は私の答えを更新しました。 – BluesRockAddict

2

使用AJAX:

1)フォームの送信を処理するためのビューを作成します。

def my_ajax_form_submission_view(request): 
    if request.method == 'POST': 
     form = MyForm(request.POST) 
     if form.is_valid(): 
      # save data or whatever other action you want to take 
      resp = {'success': True} 
     else: 
      resp = {'success': False} 

     return HttpResponse(simplejson.dumps(resp), mimetype='application/json') 

    else: 
     return HttpResponseBadRequest() 

その後、ネクタイをあなたのURLパターンを見てください。

2)AJAXでフォームを送信してくださいjQuery):

$('#my-form-id').submit(function(){ 
    var $form = $(this); 
    $.post('/url/to/ajax/view/', $form.serialize(), function(data, jqXHR){ 
     if (data.success) { 
      alert('Form submitted!'); 
     } else { 
      alert('Form not valid'); 
     } 
    }); 
    return false; 
}); 

これは基本です。

1

これは、私が使用してきた標準的なビューコードパターンです。これは、より詳細な返信応答、エラー処理、フォームの検証/チェックなどを行うことができます。

def payment_details(request, obj_id): 
    yourobj = get_object_or_404(Obj, pk=obj_id) 
    form = TheForm(instance=yourobj) 

    if request.method == 'POST': 
     form = TheForm(request.POST, instance=yourobj) 
     if form.is_valid(): 
      yourobj = form.save() 
      messages.success(request, 'Yourobj is saved!') 
      url = reverse('SOMEURL') 
      return redirect(url) 

    template = 'SOMETEMPLATE' 
    template_vars = {'TEMPLATEVARS': TEMPLATEVARS} 
    return render(request, template, template_vars) 

は1つが、このような上記のビューを再作成することもでき、Advanced Forms talk DjangoConで見た:

def payment_details(request, obj_id): 
    yourobj = get_object_or_404(Obj, pk=obj_id) 
    form = TheForm(request.POST or NONE, instance=yourobj) 

    if request.method == 'POST' and form.is_valid(): 
     yourobj = form.save() 
     messages.success(request, 'Yourobj is saved!') 
     url = reverse('SOMEURL') 
     return redirect(url) 

    template = 'SOMETEMPLATE' 
    template_vars = {'TEMPLATEVARS': TEMPLATEVARS} 
    return render(request, template, template_vars) 
関連する問題