2024-04-19 02:44:30 发布
网友
我正在编写一个Django应用程序,虽然我对Django有点熟悉,但对JavaScript却相当陌生。我在我的一个页面中添加了几行JavaScript,以便包含一个地图。在
这个脚本只包含初始化地图,然后根据数据库中保存的信息添加标记。在
既然代码太少,那么将脚本保留在HTML模板中并使用{{info}}从数据库传递信息是否仍然被认为是不好的做法?在
{{info}}
如果是这样,你认为什么方法更好?在
我假设您的建议是将JS脚本和的所需数据都放入模板(通过字符串插值将数据注入JS脚本)
你可以看到这会很快失控。下面我提供代码组织的级别,大致按升序排列(一般来说,越远越好)
首先:将JS放入它自己的.JS文件中并通过<script>标记包含它是很容易的。所以我们就这么做吧。此外,现代浏览器可以并行加载文件,因此可以同时加载HTML和JS文件。在
<script>
现在我看到的另一个问题是在包含JS代码之前使用<script>data = {"info": "something"}</script>将数据传递到JS中。在
<script>data = {"info": "something"}</script>
由于许多原因,这也不理想,这是因为数据是在Django模板中进行字符串插值的:
不过,既然您说您熟悉Django,我建议您创建一个视图,以JSON格式返回客户端JS需要的数据。E、 g.在/api/info上返回{"info": "something"}的东西。在
/api/info
{"info": "something"}
有很多方法可以实现这一点,here's a start(尽管可能已经过时)
那我就要脚本.js用一个简单的httpget调用读取数据。很多JS库可以很容易地做到这一点。在
是的,那是个坏习惯。在
考虑按照django官方文档页面上的描述为您的应用定义静态文件夹:Managing static files,并通过static template tag上传您的js。在
js
您可以通过创建单独的django视图来获取{{ info }}变量中的数据,该视图将返回JsonResponse,然后执行AJAX请求从新创建的dd js文件中获取所需的数据。在
{{ info }}
在我的Django项目中,如果我使用的是每隔一个模板扩展的“base”模板,我只需在HTML中的<head></head>内放置一个名为“extrahead”的块。在
<head></head>
<html> <head> ........ other header stuff ........ include other scripts {% block extrahead %} {% endblock %} </head> ............. </html>
。。。然后在你想要地图的模板中使用这个块。假设它只是静态js代码?在
我假设您的建议是将JS脚本和的所需数据都放入模板(通过字符串插值将数据注入JS脚本)
你可以看到这会很快失控。下面我提供代码组织的级别,大致按升序排列(一般来说,越远越好)
1。使用脚本标记包含JS,而不是嵌入到HTML中
首先:将JS放入它自己的.JS文件中并通过
<script>
标记包含它是很容易的。所以我们就这么做吧。此外,现代浏览器可以并行加载文件,因此可以同时加载HTML和JS文件。在2。避免使用Django模板将数据输入JS
现在我看到的另一个问题是在包含JS代码之前使用
<script>data = {"info": "something"}</script>
将数据传递到JS中。在由于许多原因,这也不理想,这是因为数据是在Django模板中进行字符串插值的:
3。让JS通过Django(REST)API获取数据
不过,既然您说您熟悉Django,我建议您创建一个视图,以JSON格式返回客户端JS需要的数据。E、 g.在
/api/info
上返回{"info": "something"}
的东西。在有很多方法可以实现这一点,here's a start(尽管可能已经过时)
那我就要脚本.js用一个简单的httpget调用读取数据。很多JS库可以很容易地做到这一点。在
这种方法的一些优点
是的,那是个坏习惯。在
考虑按照django官方文档页面上的描述为您的应用定义静态文件夹:Managing static files,并通过static template tag上传您的
js
。在您可以通过创建单独的django视图来获取
{{ info }}
变量中的数据,该视图将返回JsonResponse,然后执行AJAX请求从新创建的dd js文件中获取所需的数据。在在我的Django项目中,如果我使用的是每隔一个模板扩展的“base”模板,我只需在HTML中的
<head></head>
内放置一个名为“extrahead”的块。在。。。然后在你想要地图的模板中使用这个块。假设它只是静态js代码?在
相关问题 更多 >
编程相关推荐