我必须在窗口对象中存储一些数据才能在前端渲染中使用它。我有一个模型:
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/