0

これまでのところ、dajax を使用してこのビューを実装することに成功しましたが、非常に面倒で、これまで読んできたように、ビューを view.py ファイルに含めることをお勧めします。このガイドを使用して実装しようとしました: http://www.micahcarrick.com/ajax-form-submission-django.htmlが、クリックされたボタンを読み取ることができませんでした。

ページには、接続されている機器のプロットやその他のステータスも含まれているため、送信後も同じビューが表示されます (リダイレクトなし)。

models.py

class ActiveMeas(models.Model):
    channels    = models.CharField(max_length=100)
    technology  = models.ForeignKey(TechnologyModel)
    samples     = models.IntegerField()
    delay       = models.IntegerField()
    table       = models.IntegerField()
    stir        = models.IntegerField()

フォーム.py

class ActiveForm(ModelForm):
    class Meta:
        model=ActiveMeas

htmlファイル

<form action="" method="post" id="activeform">
    <div id="ajaxwrapper">
    {% csrf_token %}
    {{ form.non_field_errors }}
    {{ form.as_p }}
    <p id="sendwrapper"><input type="submit" value="Start" id="idstartbut" name="_ButtonStart"/></p>
    <p id="sendwrapper"><input type="submit" value="Stop" id="idstopbut" name="_ButtonStop"/></p>
    </div>
</form>

そして、ボタンスタートまたはボタンストップに入ることのないビューファイル。もう 1 つの質問は、データを JavaScript に返し、そこから更新するにはどうすればよいかということです。

ビュー.py

def active(request):
    if request.POST:
        form = ActiveForm(request.POST)
        if '_ButtonStart' in request.POST:
            print "START"
            if form.is_valid():
                response_data = {'data':request.POST}
                return HttpResponse(simplejson.dumps(response_data))
            else:
                print "NOT VALID"
                response_data = {'data':request.POST}
                return HttpResponse(simplejson.dumps(response_data))
        elif '_ButtonStop' in request.POST:
            print "STOP"
    else:
        form = ActiveForm()
    return render(request, 'active.html', {'index': "active",'form':form})

JavaScript

function ActiveInit(){
    $(document).ready(function () {
    $(function() {
        var form = $("#activeform");
        form.submit(function(e) {
            $("#ajaxwrapper").load(
                form.attr('action') + ' #ajaxwrapper',
                form.serializeArray(),
            );
            e.preventDefault(); 
        });
    });
}

私はdjango、ajax、jQueryの両方に非常に慣れていません。ですから、何か違うことをしなければならない場合と、私の問題を解決する方法を教えてください。

4

2 に答える 2

2

もう少し静かに検索した後、私が望んでいたことを正確に行うjQueryフォームプラグインhttp://www.malsup.com/jquery/form/を見つけました。

だから単に私のJavaScriptは今です:

$(document).ready(function(){
    $('#aform').ajaxForm(function(data){
        if(data){
              //Do something with the returned data
        }
    });
});

フォームを送信し、値をビューに送信します。

次に、ビュー関数がエラーを jQuery にダンプし、エラーがあれば表示されるようにします

if request.POST:
    form = ActiveForm(request.POST)
    if form.is_valid():
        errors=""
        if '_ButtonStart' in request.POST:
            print "START"
        elif '_ButtonStop' in request.POST:
            print "STOP"
    else:
        print "NOT VALID stop"
        errors=form.errors
    return HttpResponse(simplejson.dumps(errors))
else:
    form = ActiveForm()
    return render(request, 'active.html', {'index': "active",'form':form})

JavaScript では、次の方法でエラーを読み取ることができます。

var errors = $.parseJSON(data);
console.log(errors.samples);     //Samples is an inputbox in my form 
于 2013-05-31T20:41:04.003 に答える
2

ajax を使用するかどうかに関係なく、フォームを送信することに違いはありません。

あるケースでは、ブラウザがすべてを処理し、サーバーに送信されるクエリをまとめます.ajaxの場合、すべてがjavascriptによって行われます-あなたの場合はjQueryです。

これを見てください:http://api.jquery.com/jQuery.post/

それでは、返された検証データを django から取得するにはどうすればよいでしょうか?

2 つのアプローチがあります。

1) フォームのレンダリングされたテンプレートを返し、既存のフォームを返されたフォームに置き換えるだけです。その場合、そのテンプレート内のすべてのエラー メッセージをレンダリングする必要があります。次のリンクをご覧ください: http://djangosnippets.org/snippets/1094/ テンプレートで Django '__all__' フォーム エラーを表示するにはどうすればよいですか?

2) 2 番目のケースでは、django 側ですべてのフォーム エラーのリストを手動でまとめることができます。それらをjsonに変換し、エラーをWebサイトの要素と照合して表示するスクリプトを記述します。

jquery と django を初めて使用する場合は、1) の方がはるかに簡単です 2)

幸運を

于 2013-05-30T18:40:27.253 に答える