如何将dict of dict从Django发送到javascript

如何将dict of dict从Django发送到javascript,javascript,html,django,vue.js,Javascript,Html,Django,Vue.js,我想将数据从Django发送到JavaScript,这样我就可以在JS+Vue中编写所有逻辑并保持html干净 在Django我有 context={'names':{'fn':'john','ln':'cena'}} return render(request,'app/page1.html',context) 在page1.html模板中,我有 <script type="text/javascript"> var names="{{names}}"; </script&

我想将数据从Django发送到JavaScript,这样我就可以在JS+Vue中编写所有逻辑并保持html干净

在Django我有

context={'names':{'fn':'john','ln':'cena'}}
return render(request,'app/page1.html',context)
page1.html
模板中,我有

<script type="text/javascript"> var names="{{names}}"; </script>
var names=“{{names}}”;
在javascript中,如何访问
names.fn
&
names.ln

我还有两个相关问题:

  • 这是在呈现模板时直接从Django向JS发送数据的首选Django方法。(我唯一知道的另一种方法是通过Ajax调用。在这里,我不想在页面呈现后进行额外的Ajax调用)
  • 从安全角度来看,将Django数据相关的逻辑
    {%if x>y%}
    保存在模板中更好,还是将逻辑部分移动到JS+Vue并将数据结构保留在模板中就可以了。我这样问是因为当我在浏览器窗口中检查页面源代码时,我可以看到整个JS代码,但我看不到html中Django条件语句中的任何内容:
    {%if x>y%}--这在浏览器中是不可见的--{%endif%}
  • 谢谢

    有:

    然后,在JS中:

    var names = JSON.parse(document.getElementById('names').textContent);
    
    或者,安装;然后,你可以直接说

    {% load jsonify %}
    <script type="text/javascript"> var names={{names|jsonify}}; </script>
    
    {%load jsonify%}
    var names={{names | jsonify}};
    
    至于你的第二个问题:Vue所做的一切(或棱角分明的、反应激烈的、吸引人的或击倒人的……)都是客户端,Django所做的一切都是服务器端。如果您正在构建一个单页应用程序,那么您应该尽可能多地使用Vue(或Angular或React或Ractive或Knockout…);如果不是,则可能不需要这样的框架。

    有:

    然后,在JS中:

    var names = JSON.parse(document.getElementById('names').textContent);
    
    或者,安装;然后,你可以直接说

    {% load jsonify %}
    <script type="text/javascript"> var names={{names|jsonify}}; </script>
    
    {%load jsonify%}
    var names={{names | jsonify}};
    

    至于你的第二个问题:Vue所做的一切(或棱角分明的、反应激烈的、吸引人的或击倒人的……)都是客户端,Django所做的一切都是服务器端。如果您正在构建一个单页应用程序,那么您应该尽可能多地使用Vue(或Angular或React或Ractive或Knockout…);如果您不是,那么您可能不需要这样的框架。

    pip install django jsonify
    而不是
    pip install jsonify
    pip install django jsonify
    而不是
    pip install jsonify