[英]Passing a Dictionary from Django view to a Django template
我正在尝试将以下上下文从 views.py 传递到 Django 模板:
意见.py:
def home(request):
context = {
'dict_1': {'key_1': ['val_11', 'val_12'], 'key_2': ['val_21', 'val_22']}
}
return render(request, 'app/home.html', context)
家.html:
<script type="text/javascript">
var java_dict = {{ dict_1 }};
console.log(java_dict);
</script>
这会引发错误: Uncaught SyntaxError: Unexpected token '&'
查了一下,发现javascript中的字典是这样写的:
{'key_1': ['val_11', 'val_12'], 'key_2': ['val_21', 'val_22']}
这可能意味着引号字符 (') 被错误读取。 我该如何解决这个问题?
出于安全目的,您传递到 Django 模板的上下文数据在默认情况下会被转义。
如果您确定数据是安全的,您可以这样做:
视图.py
import json
def home(request):
# Use JSON dump so that it will be a data that can be loaded in javascript
context = {
'dict_1': json.dumps({
'key_1': ['val_11', 'val_12'], 'key_2': ['val_21', 'val_22']
})
}
return render(request, 'app/home.html', context)
家.html
<script type="text/javascript">
var java_dict = {{ dict_1| safe }}; // Actually solve your problem. Don't escape the data.
console.log(java_dict);
</script>
默认情况下,出于安全目的,Django 模板中的所有值都会转义 HTML 个字符。 如果你想在 JavaScript 中使用这本词典,你应该使用json_script过滤器。 请阅读文档以了解发生了什么。
您的问题的解决方案是:
将包含您的字典的脚本标记添加到模板
{{ dict_1 |json_script:"ID_OF_NEW_SCRIPT_TAG" }}
在您的脚本标签中加载字典值(我将使用您在示例中使用的名称)
var java_dict = JSON.parse(document.getElementById('ID_OF_NEW_SCRIPT_TAG').textContent); console.log(java_dict);
将ID_OF_NEW_SCRIPT_TAG替换为对您有意义的任何 ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.