繁体   English   中英

将字典从 Django 视图传递到 Django 模板

[英]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中的字典是这样写的:

{&#39;key_1&#39;: [&#39;val_11&#39;, &#39;val_12&#39;], &#39;key_2&#39;: [&#39;val_21&#39;, &#39;val_22&#39;]}

这可能意味着引号字符 (') 被错误读取。 我该如何解决这个问题?

出于安全目的,您传递到 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过滤器。 请阅读文档以了解发生了什么。

您的问题的解决方案是:

  1. 将包含您的字典的脚本标记添加到模板

    {{ dict_1 |json_script:"ID_OF_NEW_SCRIPT_TAG" }}
  2. 在您的脚本标签中加载字典值(我将使用您在示例中使用的名称)

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM