2

データベース フィールドのコンテンツを表示する django ベースの Web サイトにテキスト領域があります。このフィールドを編集して、データベース内のフィールドを更新する関数に送信できるようにしたいと考えています。

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

要約すると、別の URL を参照する必要なく、html フォームを使用して django/python スクリプトの関数に対処するにはどうすればよいですか?

4

3 に答える 3

3

通常、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(...)      
于 2012-05-03T21:06:07.323 に答える
3

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()

次に、ビューをurlpatternsに結び付けます

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;
});

それが基本です。より詳細な戻り応答、エラー処理、フォームの検証/チェックなどを提供でき、提供する必要があります。

于 2012-05-03T21:12:51.783 に答える
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)

DjangoCon でのAdvanced Forms の講演を見て、上記のビューを次のように書き直すことができます。

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)
于 2012-05-04T01:39:18.467 に答える