我正在编写 Django 应用程序,虽然对 Django 有点熟悉,但对 JavaScript 却很不熟悉。我将几行 JavaScript 添加到我的一个页面中以包含一张 map 。
脚本只包含初始化 map ,然后根据保存在我的数据库中的信息添加标记。
鉴于代码如此之少,将脚本保留在 HTML 模板中并使用 {{info}}
从我的数据库传递信息是否仍然被认为是不好的做法?
如果是这样,您认为哪种方法更好?
最佳答案
我假设您的建议是将 JS 脚本 和 其所需数据都放入模板中(数据通过字符串插值注入(inject) JS 脚本)
您可以看到这会如何迅速失控。下面我提供了代码组织的级别,大致按升序排列(一般来说,越往上越好)
1。使用脚本标签包含您的 JS,而不是嵌入到 HTML 中
首先:将 JS 放入它自己的 .js 文件中,并通过 <script>
包含它。标签很容易。所以让我们这样做吧。此外,现代浏览器可以并行加载文件,因此同时加载 HTML 和 JS 文件是一个优势。
2。避免使用 Django 模板将数据输入 JS
现在我看到人们做的另一个问题是使用 <script>data = {"info": "something"}</script>
将数据传递到 JS在包含他们的 JS 代码之前。
由于很多原因,这也不理想,这是因为数据在 Django 模板中被字符串插入:
3。让 JS 通过 Django (REST) API 拉取数据
但是既然您说您熟悉 Django,我建议您创建一个 View ,以 JSON 格式返回客户端 JS 所需的数据。例如。返回的东西 {"info": "something"}
在 /api/info
.
有很多方法可以实现,here's a start (尽管可能已过时)
然后我会让 script.js 文件通过简单的 HTTP GET 调用读取数据。许多 JS 库可以轻松地为您完成这项工作。
这种方法的一些优点
- 您的代码(JS 部分)独立于数据部分(JSON 数据)
- 您可以轻松查看/测试输入 JSON 的内容,因为它只是一个 HTTP GET 请求
- 您的 HTML/JS 部分是完全静态的,因此可以缓存,从而提高加载页面的性能。
- Python 数据到 JSON 的转换非常简单(没有插值功夫)
关于Django HTML 模板中的 Javascript 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34843406/