python - 从 Django View 发送 JSON 数据

标签 python json django

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

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 对象中:

  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)建议的那样:它返回

Exception Value: list indices must be integers, not str

但是如果我使用:

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

这似乎有效。我将阅读有关“list()”的文档。

最佳答案

您正在返回一个 python 字典,您需要使用 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)

此外,您可能想阅读 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)

关于python - 从 Django View 发送 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47241709/

相关文章:

python - 使用 Django Rest Framework 返回当前用户

python - 在 numba 中使用 python 类型提示

python - Django ·奥斯卡获得最便宜的报价

python - 与 MATLAB 相比,改进 Numpy 中复杂矩阵元素求和的更好方法

python - hashlib 模块出现错误

javascript - 使用 AngularJS 输出 JSON

java - 如何发送带有 json 正文和 url 参数的 http 帖子?

json - Apache Spark 和 MongoDB Hadoop-Connector 创建的 BSON 结构

django - 无效的密码格式或未知的散列算法

python - Django:限制可能的日期