我想通过模板将查询集从视图传递到javascript函数:
我的view.py
:
def myview(request):
lista=Mymodel.objects.filter(tipo=mytipo)
context_dict['lista']=lista
return render(request, 'mytemplate.html', context_dict)
我的template.html
:
<script>
<!--
window.onpageshow = function() {
myfunction('{{lista}}');
};
-->
</script>
我的javascript.js
:
function myfunction(lista) {
for (i=0; i<lista.length; i++) {
console.log(lista[i].name)
}
}
问题是lista
成为字符串。我尝试使用JSONEncoder,但我不确定如何使用。我想避免使用JsonResponse,因为我想将该视图用于我的模板(如果可能的话)。
修改:
答案中提出的解决方案存在问题:
TypeError: Python object is not JSON serializable
并且this link中提出的解决方案也不起作用(无法找到_meta
调用的model_to_dict
属性。
JSON.parse不起作用
SyntaxError: missing ) after argument list
问题似乎是在一条路径和另一条路径之间:
myfunction(JSON.parse('['/mypath/myimage.png', '/otherpath/otherimage.png', 'etc... ']'));
同样在模板中,您必须添加|safe
。
幸运的是我需要一个字符串列表,所以:
我的view.py
:
def myview(request):
lista=Mymodel.objects.filter(tipo=mytipo)
lista_formatted=[]
for elem in lista:
lista_formatted.append('/media/'+str(elem.myfield))
lista_formatted=json.dumps(lista_formatted)
context_dict['lista']=lista_formatted
return render(request, 'mytemplate.html', context_dict)
我的template.html
:
<script>
<!--
window.onpageshow = function() {
myfunction({{lista|safe}});
};
-->
</script>
答案 0 :(得分:4)
更改
下面的一行context_dict['lista']=json.dumps(lista) //note json.dumps() wraps it
删除此处的引号:
<script>
<!--
window.onpageshow = function() {
myfunction({{lista}});//<--quote removed!
};
-->
</script>