首页 > 解决方案 > 如何将 django 中的数据渲染到 AJAX?

问题描述

我正在尝试从基于 django 类的视图向 ajax 发送一个 json 值,并且我发送的数据将通过 ajax 附加到 html 中。但我无法成功地将值从后端发送到前端。

class DetailView(TemplateView):
    template_name = 'list.html'

    def get_context_data(self,*args, **kwargs):
        context = super(DetailView,self).get_context_data()
        list_view = GetList().get_data(self.request)
        movie_list = list.json()
        context['list']= movie_list
        print(movie_list)
        return context

因此,此代码仅向 ajax 数据发送模板值,当我在成功调用时执行 console.log(data) 时,它会在 alert 和 console.log 中显示“list.html”的整个 html 代码。但它会在 cmd 控制台中打印所有值。

cclass DetailView(TemplateView):
    template_name = 'list.html'


    def get(self,request):
        list_view = GetList().get_data(self.request)
        movie_list = list.json()
        return HttpResponse(json.dumps(movie_list))

此代码打印相应 html 上的所有值,但不调用 ajax 函数。因此 console.log 中没有显示值。

这是我的 ajax 调用,首先我想看看天气我是否成功地获得了成功调用的值。

<script>
    $(document).ready(function(){
        $.ajax({
            method :'GET',
            url: '/detail',

            success: function(data){
            alert(data)
            console.log(data)
            },
        })
    })
</script>

那么,我怎样才能达到我想要的结果呢?我想在 ajax 调用中获取值,所以我可以在列表形式的表中显示这些值

标签: javascriptpythonjqueryajaxdjango

解决方案


您可以使用JsonResponse发送 json 数据。(您可以在此处的文档中查看详细信息)

像下面

from django.http import JsonResponse

class DetailView(TemplateView):
template_name = 'list.html'

def get(self,request):
    list_view = GetList().get_data(self.request)
    movie_list = list.json()
    return JsonResponse(movie_list, status=200)

顺便说一句,你必须知道你的数据类型。JsonResponse自动序列化您的数据,因此您不必使用json()您的数据。


推荐阅读