1

編集

print request.POST['video'] を書くと、'video' の値があってもコンソールに何も出力されません。javascript で間違った値を誤って取得していますか? 「video34」(非表示フィールドの値) を表示しようとしています。

オリジナル

Django で jQuery/AJAX を使用してデータを POST しようとしていますが、問題が発生しています。views.py の「video」変数にアクセスするにはどうすればよいですか? views.py に「ビデオを印刷」と書き込むと、コンソールに POST /edit_favorites/ HTTP/1.1" 500 10113 というエラーが表示されます。

ビュー.py

from django.shortcuts import render_to_response
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def edit_favorites(request):
    if request.is_ajax():
        message = "Yes, AJAX!"
    else:
        message = "Not Ajax"
    return HttpResponse(message)

URLconf:

url(r'^edit_favorites/', 'edit_favorites'),

html:

<form method='post' id ='test'>
     <input type="hidden" value="video34" />
    <input type='submit' value='Test button'/>
    
    <div id = 'message'>Initial text</div>
        
</form>

JavaScript:

<script type="text/javascript">
   $(document).ready(function() {
       $("#test").submit(function(event){
       event.preventDefault();
            $.ajax({
                 type:"POST",
                 url:"/edit_favorites/",
                 data: {
                        'video': $('#test').val() // from form
                        },
                 success: function(){
                     $('#message').html("<h2>Contact Form Submitted!</h2>") 
                    }
            });
            return false;
       });
       
    });
</script>
4

2 に答える 2

4

通常のrequest.POST['video']POST と同じように にあります。

于 2012-11-20T13:04:16.997 に答える
2

コンソールに表示されるメッセージではPOST /edit_favorites/ HTTP/1.1" 500 10113、「500」がキーです。これは、サーバー コードにエラーがあることを意味します。この場合、存在しない変数を「印刷」しようとしています。NameErrorどこかのトレースバックが表示されないことに驚いています。

私はDjangoのユーザーではないので、他の誰かがより良い推奨事項でチャイムを鳴らすことができるかもしれませんが、Djangoのドキュメントによると、投稿の引数はすべてrequest.POSTdictのようなオブジェクトです。

チェックすることをお勧めします:

if request.method == 'POST':
    if 'video' in request.POST:
        video = request.POST['video']
        # Do stuff, etc...
    else:
        # Raise an error

それはサーバー側です。HTML では、すべてのフォーム入力フィールドにも名前を付ける必要があります。たとえば<input name="video" type="hidden" value="video32" />、など。HTML フォームの投稿について詳しくお読みになることをお勧めします。

于 2012-11-20T13:08:59.037 に答える