【问题标题】:How do I access a variable in views.py using jQuery/AJAX?如何使用 jQuery/AJAX 访问 views.py 中的变量?
【发布时间】:2012-11-08 13:08:09
【问题描述】:

编辑

当我编写 print request.POST['video'] 时,即使存在 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试显示“video34”(隐藏字段中的值)。

原创

我正在尝试在 Django 中使用 jQuery/AJAX 发布数据,但遇到了麻烦。如何访问 views.py 中的“视频”变量?当我在 views.py 中编写“打印视频”时,我在控制台中收到错误消息 POST /edit_favorites/ HTTP/1.1" 500 10113。

views.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>

【问题讨论】:

    标签: jquery python ajax django views


    【解决方案1】:

    它在request.POST['video'] 中,就像在普通的 POST 中一样。

    【讨论】:

    • 当我编写 print request.POST['video'] 时,即使存在 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试让“video34”显示出来。
    • 是的。 #test 指的是表单,表单没有val()。你应该给你的领域一个id 并使用它。请注意,您还应该始终为您的字段提供name,否则您将无法正常提交。
    • 使用 $('#test').serialize() 来查看所有表单数据。就像丹尼尔说的那样,表单没有 val(),所以你什么都不发送
    【解决方案2】:

    在您在控制台POST /edit_favorites/ HTTP/1.1" 500 10113 中收到的消息中,“500”是关键。这意味着您的服务器代码很可能有错误。在这种情况下,您试图“打印”一个不存在的变量。事实上,我很惊讶您在某处看不到 NameError 的回溯。

    我不是 Django 用户,所以也许其他人可以提出更好的建议,但根据Django docs,所有帖子参数都在request.POST 中,这是一个类似字典的对象。

    我建议检查一下:

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

    那是在服务器端。在您的 HTML 中,您还需要为所有表单输入字段命名。例如&lt;input name="video" type="hidden" value="video32" /&gt; 等。您可能希望阅读有关 HTML 表单发布的更多信息。

    【讨论】:

    • 当我编写 print request.POST['video'] 时,即使有 'video' 的值,控制台中也不会打印任何内容。我是否在 javascript 中错误地获取了错误的值?我正在尝试让“video34”显示出来。
    • 在您的情况下,您的 HTML 还缺少表单输入字段的“名称”属性。
    猜你喜欢
    • 2020-06-14
    • 2021-12-11
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多