从 django views.py 获取数据并使用 ajax 显示它

Posted

技术标签:

【中文标题】从 django views.py 获取数据并使用 ajax 显示它【英文标题】:Getting data back from django views.py and using ajax to display it 【发布时间】:2012-03-16 22:58:48 【问题描述】:

已编辑

我正在尝试使用 jquery/ajax 来显示从 django 方法返回的数据。

我有一个名为keywordBtn 的html 按钮。所以当它被按下时,updateKeywordSubscribed 方法将被调用。

但是,django 没有返回我的对象​​。我的方法有问题吗?

如果成功,div 部分名称“update”将显示该 json 列表中的单词列表。

我的 html 中有什么:

<script type="text/javascript">
        $(document).ready(function()  
            $("#keywordBtn").click(function(e)  
                updateKeywordSubscribed(e, "#keywords"); 
            );
        );
        function updateKeywordSubscribed(e, keywords) 
            e.preventDefault();
            var option_form = jQuery(e.target);
            $.ajax(
                url : option_form.attr('action'),
                type : option_form.attr('method'),
                data : option_form.serialize(),
                dataType : 'json',
                success : function(response)  alert ('sometext'))
        
</script>

我的观点.py:

def keyword_subscribe(request):
    if 'keyword_input' in request.POST:
    if 'name_input' in request.POST:
        xhr = request.GET.has_key('xhr')
        response_dict = 
            new_keyword = request.POST['keyword_input']
        username = request.POST['name_input']
        response_dict.update('keyword_input': new_keyword, 'name_input': username)
        power_keyword = subscribe_keyword(username,keywords)
        if power_keyword:
            response_dict.update('success':True)
        else:
            response_dict.update('errors':)
            if not username:
                        response_dict['errors'].update('name_input': 'User ID is required')
                if not total and total is not False:
                        response_dict['errors'].update('keyword_input': 'Keyword field is blank')
        if xhr:
                return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')
            return render_to_response('r2/userprofile_list.html', response_dict)

【问题讨论】:

我只需要了解 jquery 如何从 views.py 中读取数据。剩下的我可以填写。 【参考方案1】:

我正在做一些类似于你在我当前项目中需要的事情。

我得到这个邮政编码视图,它返回一个 geojson 结果或 null

我的看法:

def get_zipcode(request, latitude, longitude):
    # Point on a map
    point = GEOSGeometry('POINT(%s %s)' % (longitude, latitude))

    try :
        zipcodes = Zipcode.objects.filter(mpoly__contains=point)
        return HttpResponse(zipcodes[0].mpoly.geojson, mimetype="application/json")
    except :
        return HttpResponse(json.dumps(None), mimetype="application/json")

我的 mimetype 是 application/json 而不是 application/javascript

我的网址:

url(r'^collision/zipcode/(?P<latitude>(\-|)\d+\.\d+)/(?P<longitude>(\-|)\d+\.\d+)/', 'core.views.get_zipcode', name='collision-zipcode'),

调用并处理json结果的JS

$.ajax(
    url : '/collision/zipcode/' + latitude + '/' + longitude + '/',
    dataType : 'json',
    type : 'GET',
    success: function(data)
    
        var paths = coord_to_paths(data.coordinates); 
        var polygon = new google.maps.Polygon( 
            paths : paths, 
            strokeColor : "#FF7800", 
            strokeOpacity : 1, 
            strokeWeight : 2, 
            fillColor : "#FF7800", 
            fillOpacity : 0.6
        );

        polygon.setMap(map);

        console.log("adding zipcode polygon");
    
);

请注意,如果您正在检索 json,如果您将 dataType 设置为 'json',您应该以 JS native 的身份访问成功函数中的数据。

如果您需要调试 jquery 实际检索的数据,请执行

console.log(data);
并使用浏览器查看开发控制台(chrome/ff 我不知道其他浏览器是否支持此功能)

【讨论】:

哇弗朗西斯,好答案,你能帮我看看成功函数的哪个部分是从视图传递的数据吗? 在我的示例中,我的 ajax 成功函数采用单个参数“数据”,即 json 响应。看起来您的 ajax 成功函数将其称为响应。你应该 console.log 看看你得到了什么。如果我不得不猜测,你认为有问题并且它没有返回好的 json,所以你的成功函数不知道如何处理它。

以上是关于从 django views.py 获取数据并使用 ajax 显示它的主要内容,如果未能解决你的问题,请参考以下文章

Django 动态名称属性并在views.py 中获取值

如何从views.py 中获取值并在html 模板中使用它?

如何从views.py文件将数据插入django数据库?

django/ajax:无法在 views.py 中获取 Ajax 发布数据

如何从我的 html 表单获取 post id 到 views.py

django views.py视图 获取用户请求相关信息以及请求头