当前位置: 首页 > 知识库问答 >
问题:

从Django中的视图发送JSON数据

孟宏才
2023-03-14

我必须在窗口对象中存储一些数据,以便在前端渲染中使用它。我有一个模型:

from django.db import models
from tools.various.db import Base
from tools.files.fields import CustomImgField, IMAGES_DIRECTORY_ORIGINAL
from django.conf import settings

class myModel(Base):
    myName                     = models.CharField(max_length=100, verbose_name='myName')
    mySurname                  = models.CharField(max_length=100, verbose_name='mySurname')

我有一个观点:

from django.http import Http404
from django.views.generic import TemplateView
from django.http import JsonResponse
from json import dumps
from front.models import Language
from front.models import myModel


class BaseView(TemplateView):
    def get_context_data(self, **kwargs):
        context = super(BaseView, self).get_context_data(**kwargs)

        context['myData'] = myModel.objects.value()
        return context

我想检索myData作为JSON对象并将其存储在窗口对象中:

  window.app = {
    data: {},
    settings: {
      staticUrl: '{{ STATIC_URL }}',
      urls: {},
      storedData: {{ myData|jsonify|safe }}
    }
  };

但我得到了这样的回答:

[{'myName': u'foo', 'mySurname': u'bar', u'id': 1L, 'order': 0L}] is not JSON serializable

有人知道我做错了什么吗?

谢啦!

编辑:

我只是按照André Laszlo的建议尝试了< code>return list(context):它返回

Exception Value: list indices must be integers, not str

但是如果我使用:

    context['myData'] = list(myModel.objects.values())
    return context

似乎很管用。我将阅读有关“list()”的文档。

共有2个答案

韩夕
2023-03-14

我认为问题是你的列表实际上不是一个列表,它是一个查询集,只是打印出来看起来像一个列表。

你有没有试过:

context['myData'] = list(myModel.objects.values())
return context

我认为它应该返回一个包含字典的列表,应该是JSON序列化的。如果问题不起作用,请用结果更新您的问题。

王辉
2023-03-14

您正在返回一个python 字典,您需要使用< code>json.dumps()将其序列化为JSON

您已经在导入json但没有使用它。

from django.http import Http404
from django.views.generic import TemplateView
from django.http import JsonResponse
from json import dumps
from front.models import Language
from front.models import myModel

class BaseView(TemplateView):
    def get_context_data(self, **kwargs):
        context = super(BaseView, self).get_context_data(**kwargs)
        context['myData'] = myModel.objects.value()
        return dumps(context)

此外,您可能希望阅读< code>ujson -比内置的json库更快。

最好,如果您使用的是Django 1.7,您可以执行以下操作:

from django.http import Http404
from django.views.generic import TemplateView
from django.http import JsonResponse
from json import dumps
from front.models import Language
from front.models import myModel
from django.http import JsonResponse


class BaseView(TemplateView):
    def get_context_data(self, **kwargs):
        context = super(BaseView, self).get_context_data(**kwargs)

        context['myData'] = myModel.objects.value()
        return JsonResponse(context)
 类似资料:
  • 问题内容: 我试图让Ajax 将数据发送到视图,以便在单击with类时可以在那里处理数据。 问题是,当我单击所说的div并在视图文件中打印时,我得到了一个包含的对象。空!我似乎无法弄清楚为什么我的POST请求没有通过发送我的数据。 这是我的HTML … 这是我的AJAX / jQuery … 这是我的看法 这是我的网址路线… 我尝试过的东西 1)我用代替,我能够使用 1)尝试使用和获得以下内容…

  • 问题内容: 我正在使用Django为项目创建基于Web的应用程序,并且遇到了将数组从Django视图返回到模板的问题。 JavaScript(JQuery)脚本将使用该数组在页面上显示的图像上绘制框。因此,该数组将具有要绘制的框的坐标。 这是Django视图中的代码,用于获取所需数据并将其序列化为JSON: 作为调试的一种方式,在模板的HTML部分中使用会将其作为输出(很抱歉,长行表示): 我认为

  • 我有一个网络服务,可以按名字搜索一些视频。它会把视频的名字和图像传给我。我应该怎么说哪个图像是哪个视频的?我应该怎么说才能播放 包裹通讯。视频 导入java。util。列表 导入android。应用程序。活动 导入android。操作系统。异步任务; 导入android。操作系统。捆 导入android。看法看法 导入android。看法看法一位听众; 导入android.widget.按钮; 导

  • 问题内容: Django视图指向一个函数,如果您只想更改一些功能,则可能会出现问题。是的,函数中可以有数百万个关键字参数,如果有语句,甚至可以更多,但是我在想更多的面向对象方法。 例如,我有一个显示用户的页面。该页面与显示组的页面非常相似,但仍与仅使用另一个数据模型不太相似。小组也有成员等… 一种方法是将视图指向类方法,然后扩展该类。有没有人尝试过这种方法或有其他想法? 问题答案: 我已经创建并使

  • 问题内容: 我在从Java servlet内的JavaScript检索以JSON形式发送的数据时遇到查询。以下是我在做什么… 这是JavaScript内向Servlet发出请求的代码的一部分 在发出此请求时,我尝试检索从Servlet中的JavaScript发送的参数,但这样做时,我首先对如何从请求中检索数据感到困惑 我在servlet中使用了以下内容: 注意: 我的Servlet中的内容类型设置

  • 问题内容: 如何将JSON数据从浏览器中的Javascript发送到服务器,并由PHP在其中进行解析? 问题答案: 我在这里获得了很多信息,所以我想发布我发现的解决方案。 问题: 从浏览器上的Javascript获取JSON数据到服务器,然后让PHP成功解析它。 环境: Windows上的浏览器(Firefox)中的Javascript。LAMP服务器作为远程服务器:Ubuntu上的PHP 5.3