Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将列表从视图上下文传递到模板,并将其指定为模板中的数组_Javascript_Python_Django - Fatal编程技术网

Javascript 将列表从视图上下文传递到模板,并将其指定为模板中的数组

Javascript 将列表从视图上下文传递到模板,并将其指定为模板中的数组,javascript,python,django,Javascript,Python,Django,我正在尝试从视图上下文传递一些列表: def list_test(request): l = ['a', 'b', 'c'] context = {'l': l} return render(request, 'app/list_test.html', context) 将前端作为JS阵列: <script> let l = {{ l }} console.log(l) </script> 但随后变量被指定为一个大字符串,并带有

我正在尝试从视图上下文传递一些列表:

def list_test(request):
    l = ['a', 'b', 'c']
    context = {'l': l}
    return render(request, 'app/list_test.html', context)
将前端作为JS阵列:

<script>
    let l = {{ l }}
    console.log(l)
</script>
但随后变量被指定为一个大字符串,并带有不需要的编码:

[&#39;a&#39;, &#39;b&#39;, &#39;c&#39;]
模板循环将工作:

 {% for x in l %}
      console.log("{{x}}")
 {% endfor %}
但我不想重复。我想立即分配列表

有没有一个简单的方法可以做到这一点

我是否应该使用模板循环将字符串拆分为数组项?

使用JSON:

def list_test(request):
    l = ['a', 'b', 'c']
    context = {'l': json.dumps(l)}
    return render(request, 'app/list_test.html', context)
并在模板中将该值标记为安全值并对其进行分析:

    let l = JSON.parse("{{ l|safe }}");

发生这种情况的原因是Django模板在默认情况下将转义字符。例如,将
&
替换为
&,以及带有
。您可以使用将内容标记为安全的

此外,使用
JSON.dumps
将数据转换为JSON blob可能更好,因此:

import json

def list_test(request):
    l = ['a', 'b', 'c']
    context = {'l': json.dumps(l)}
    return render(request, 'app/list_test.html', context)
导入json
def列表_测试(请求):
l=['a','b','c']
上下文={'l':json.dumps(l)}
返回渲染(请求'app/list_test.html',上下文)
并将其渲染为:

<script>
    let l = {{ l|safe }};
    console.log(l);
</script<

设l={l | safe}};
控制台日志(l);
<script>
    let l = {{ l|safe }};
    console.log(l);
</script<