【问题标题】:Passing Python Objects to JavaScript through Django Template Variable通过 Django 模板变量将 Python 对象传递给 JavaScript
【发布时间】:2013-05-20 09:13:12
【问题描述】:

我已经能够传递原始类型,例如this 之类的整数,但我想传递更复杂的对象,例如我创建的一些 Django 模型。这样做的正确方法是什么?

【问题讨论】:

  • 以 json 格式发送到 javascript
  • 你就不能通过吗?作为 dict(即 json)?
  • 没有“正确”的方式。只需将您需要的内容作为 JSON、字符串等传递。
  • 在 Python/JavaScript 端从对象转换为 JSON 有什么优点/缺点吗?
  • 你想要数据。这是做到这一点的方法。所以忘记优点/缺点吧。

标签: javascript django templates object


【解决方案1】:

我知道我参加聚会有点晚了,但我在自己的工作中偶然发现了这个问题。

这是对我有用的代码。

这是在我的 views.py 文件中。

from django.shortcuts import render
from django.http import HttpResponse
from .models import Model

#This is the django module which allows the Django object to become JSON
from django.core import serializers

# Create your views here.
def posts_home(request):
    json_data = serializers.serialize("json",Model.objects.all())    
    context = {
    "json" : json_data,
    }
    return render(request, "HTMLPage.html",context)

然后当我访问我的 html 文件中的数据时,它看起来像这样:

<script type = 'text/javascript'>
    var data = {{json|safe}}
    data[0]["fields"].ATTRIBUTE
</script>

data 是 JSON 对象的列表,所以我正在访问第一个对象,这就是它是 data[0] 的原因。每个 JSON 对象都有三个属性:“pk”、“model”和“fields”。 “字段”属性是数据库中的字段。此信息可在此处找到:https://docs.djangoproject.com/es/1.9/topics/serialization/#serialization-formats-json

【讨论】:

    【解决方案2】:

    特别是对于 Django 模型实例,您可以将它们serialize 转换为 JSON 并在模板上下文中使用序列化值。

    从那里,你可以简单地做:

    var myObject = eval('(' + '{{ serialized_model_instance }}' + ')');
    

    var myObject = JSON.parse('{{ serialized_model_instance }}');
    

    如果使用JSON-js(这样更安全)。

    对于一般的 Python 对象,请参阅How to make a class JSON serializable

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 2019-04-03
      • 2011-05-09
      • 2012-04-05
      • 1970-01-01
      • 2020-04-24
      • 2020-10-20
      相关资源
      最近更新 更多