我的JavaScript变量无法接受使用Django render()方法发送的对象
我试图将JSON格式的Django对象提取到我的javascript变量中。我使用了django.core导入序列化程序中的预定义方法,将其转换为JSON格式。当我试图将该对象直接提取到Jinja标记中时,它会打印所有数据,但当我试图在Javascript变量中获取该数据时,它将不起作用 view.py我的JavaScript变量无法接受使用Django render()方法发送的对象,javascript,html,json,django,python-3.x,Javascript,Html,Json,Django,Python 3.x,我试图将JSON格式的Django对象提取到我的javascript变量中。我使用了django.core导入序列化程序中的预定义方法,将其转换为JSON格式。当我试图将该对象直接提取到Jinja标记中时,它会打印所有数据,但当我试图在Javascript变量中获取该数据时,它将不起作用 view.py from django.http import HttpResponse from django.shortcuts import render from .models import Empl
from django.http import HttpResponse
from django.shortcuts import render
from .models import Employee
from django.core import serializers
import json
def home(request):
data = serializers.serialize("json", Employee.objects.all())
return render(request,'home.html',{'data':data})
home.html
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
{% extends 'masterpage.html' %}
{% block content %}
**{{data | safe}}**(go below for output)
<form action="checkEmail" method="POST">
{% csrf_token %}
<input type="text" name="emailId" placeholder="Enter Email Id">
<input type="submit">
</form>
{% endblock %}
<p id="demo"></p>
<script type="text/javascript">
var data=eval('('+'{{data}}'+')');
var p=10;
document.getElementById("demo").innerHTML=p
console.log(p)
console.log(data);
alert(data);
</script>
</body>
</html>
文件
{%extends'母版页.html%}
{%block content%}
**{{data | safe}}**(下面是输出)
{%csrf_令牌%}
{%endblock%}
var data=eval('('+'{{data}}'+');
var p=10;
document.getElementById(“demo”).innerHTML=p
console.log(p)
控制台日志(数据);
警报(数据);
输出:[{“模型”:“journal.employee”,“pk”:1,“字段”:{“ename”:“Piyush Jiwnae”,“eemail”:”jiwanepiyush@gmail.com“}}]
我可以看到在HTML中直接使用jinja标记的输出,但是当我尝试在javascript变量中获取该值时,它不会出现,正如代码中所示,我试图显示数据和var p=10;document.getElementById(“demo”).innerHTML=p此值也未在控制台上打印。您可以将数据作为JSON传递,并使用JSON解析js中的此对象。如果我看得正确,则您的脚本在该行引发错误:
var data=eval('('+'{{data}}'+')');
比如说
SyntaxError: expected property name, got '&'
在原始格式中,您的数据呈现为以下内容:
[{"model": "stack.employee", "pk":
如果将数据变量标记为安全的,则应获得适当的json对象:
var data=eval('('+'{{data|safe}}'+')');
编辑:代码中的另一个问题:
你的标签放错地方了。您应该将
{%extends'masterpage.html%}
放在模板的顶部,而不是
标记中。然后你应该去掉模板中的
标记,因为这可能已经在你的母版中了。html
是否警报(数据)正在工作?@sandeep-不,即使它也不工作没有人仍然不工作,忘记JSON对象吧,我的问题是,为什么控制台上不显示var p=10值??通过使用data=serializers.serialize(“JSON”,Employee.objects.all()),我可以成功地发送JSON数据,但无法在JavaScript variableNo上获取JSON数据,即使我像var data=eval(“(“+”{data}}}”+”)一样传递;因此,但我的控制台上仍然没有任何错误。我也尝试过你的建议,但仍然不起作用。然后我相信还有另一个问题。请参阅我的帖子编辑。如果仍然不起作用,请同时发布您的masterpage.html