javascript - 如何将 dict 的 dict 从 Django 发送到 javascript
问题描述
我想将数据从 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>
在 javascript 中如何访问names.fn
& names.ln
?
我还有两个相关的问题:
- 这是呈现模板时直接从 Django 向 JS 发送数据的首选 Django 方式吗?(我知道的唯一其他方法是通过 Ajax 调用。这里我不想在呈现页面后进行额外的 Ajax 调用)
- 从安全的角度来看,将 Django 数据相关的逻辑保留
{% if x > y %}
在模板中会更好,还是可以将逻辑部分移动到 JS + Vue 并在模板中保留数据结构。我问这个是因为当我在浏览器窗口中检查页面源代码时,我可以看到整个 JS 代码,但我看不到 html 中的 Django 条件语句中的任何内容:{% if x>y %} ----THIS IS INVISIBLE IN A BROWSER---- {% endif %}
谢谢
解决方案
{{names|json_script("names")}}
然后,在 JS 中:
var names = JSON.parse(document.getElementById('names').textContent);
或者,安装django-jsonify
;那么,你可以直接说
{% load jsonify %}
<script type="text/javascript"> var names={{names|jsonify}}; </script>
至于你的第二个问题:Vue(或 Angular 或 React 或 Ractive 或 Knockout ......)所做的一切都是客户端,Django 所做的一切都是服务器端。如果您正在构建单页应用程序,您应该尽可能多地使用 Vue(或 Angular 或 React 或 Ractive 或 Knockout ......);如果你不是,那么你可能不需要这样的框架。
推荐阅读
- python - 图形的 Python/Pandas 结构化/索引
- reactjs - 无法使用我的道具在 React 上读取未定义的属性“名称”
- android - 使用本机移动操作系统日期选择器设置日期的 Selenium 方法
- schema - 要求中列出的 OAS3 拼写错误或不存在的属性不会破坏模式的验证
- ruby-on-rails - 活动记录查询以获取具有 0 个嵌套关联的记录
- python - 如何用另一个数组中唯一值的索引替换 numpy 数组中的重复值?
- r - 我可以在 ggscatter 调用中使用 tibble 吗?
- unicode - 是否可以使用 unicode 组合字符来组合任意字符?
- android - PWA 安装通常挂在 Android 上
- css - 如何使 CSS 对所有浏览器都有效?