当前位置: 首页 > 面试题库 >

将JSON数组从Django视图返回到模板

郎玮
2023-03-14
问题内容

我正在使用Django为项目创建基于Web的应用程序,并且遇到了将数组从Django视图返回到模板的问题。

JavaScript(JQuery)脚本将使用该数组在页面上显示的图像上绘制框。因此,该数组将具有要绘制的框的坐标。

这是Django视图中的代码,用于获取所需数据并将其序列化为JSON:

def annotate(request, ...):
    ...
    oldAnnotations = lastFrame.videoannotation_set.filter(ParentVideoLabel=label)
    tags = serializers.serialize("json", oldAnnotations)
    ...
    return render_to_response('vannotate.html', {'tags': tags, ...})

作为调试的一种方式,{{ tags }}在模板的HTML部分中使用会将其作为输出(很抱歉,长行表示):

[{"pk": 491, "model": "va.videoannotation", "fields": {"ParentVideoFile": 4, "ParentVideoFrame": 201, "ParentVideoLabel": 4, "top": 220, "height": 30, "width": 30, "ParentVideoSequence": 16, "left": 242}}, {"pk": 492, "model": "va.videoannotation", "fields": {"ParentVideoFile": 4, "ParentVideoFrame": 201, "ParentVideoLabel": 4, "top": 218, "height": 30, "width": 30, "ParentVideoSequence": 16, "left": 307}}]

我认为这是JSON数组的正确格式。

稍后,在模板中,我尝试在模板tags的JavaScript部分中实际使用变量,如下所示:

{% if tags %}
  var tagbs = {{ tags|safe }};
  var tgs = JSON.parse(tagbs);
  alert("done");
{% endif %}

如果我删除了该var tgs = JSON.parse(tagbs);行,则警报框会正常弹出,其余的JavaScript会按预期工作。但是,保留此行会中断脚本。

我希望能够遍历Django模型中的所有对象并获取JavaScript中字段的值。

我不确定我在这里做错了什么,有人可以指出正确的方法吗?


问题答案:

使用Django 2.1+和现代网络的更新进行编辑:

现代的方法是:

1)将原始数据而不是JSON序列化的数据传递给模板。即:

def annotate(request, ...):
    ...
    oldAnnotations = lastFrame.videoannotation_set.filter(ParentVideoLabel=label)
    ...
    return render_to_response('vannotate.html', {'tags': oldAnnotations, ...})

2)在您的模板中,使用新的“ json_script”过滤器以包含JSON数据:

{{ tags|json_script:"tags-data" }}

这将导致HTML如下所示:

<script id="tags-data" type="application/json">{"foo": "bar"}</script>

此标记对包含“



 类似资料:
  • 问题内容: 我有一个函数,可使用Pandas分析CSV文件并生成带有摘要信息的字典。我想从Flask视图返回结果作为响应。如何返回JSON响应? 问题答案: 将摘要数据传递给该函数,该函数返回JSON响应。 从Flask 0.11开始,你可以将任何JSON可序列化的类型(不仅是dict)传递为顶级对象。

  • 问题内容: 我有一个函数,可使用Pandas分析CSV文件并生成带有摘要信息的字典。我想从Flask视图返回结果作为响应。如何返回JSON响应? 问题答案: 将摘要数据传递给该函数,该函数返回JSON响应。 从Flask 0.11开始,你可以将任何可序列化的类型(不仅是dict)传递为顶级对象。

  • 问题内容: 我有一个通过jQuery AJAX调用的PHP脚本。我希望PHP脚本将JSON格式的数据返回给javascript。这是PHP脚本中的伪代码: 基本上,我需要将两个for循环的结果插入$ json中。 问题答案: Php具有内置的JSON序列化功能。 json_encode *如果可以并且不会遭受“此处未发明”综合症, *请 使用它。

  • 我用TestNG创建了一个Selenium框架。在这个@Data提供者中包含一组代码,这些代码从excel中读取数据,并以数组形式将此值返回给@test。 因为登录测试用例有两个输入,所以方法login有两个属性。同样,若寄存器测试用例有5个输入,那个么寄存器方法将有5个属性。但我想以某种方式创建一个标准方法,这样当我从@dataprovider返回数组时。然后@test方法应该动态读取值,而不是

  • 问题内容: 有没有一种方法可以将部分呈现为MVC的JSON响应的一部分返回HTML字符串? 问题答案: PartialViewResult和ViewResult都从ViewResultBase派生,因此相同的方法应该对两者都起作用。 使用上面线程中的代码,您将可以使用:

  • 问题内容: 我正在尝试使用android NDK。 有没有办法将在JNI中创建的数组(以我的情况为例)返回给Java?如果是这样,请提供一个可以执行此操作的JNI函数的简单示例。 问题答案: 如果你已经阅读了文档,但仍然有一些问题应作为最初问题的一部分。在这种情况下,示例中的JNI函数将创建多个数组。外部数组由使用JNI函数创建的“对象”数组组成。从JNI的角度来看,这就是一个二维数组,即一个包含