Django HTML模板中的Javascript变量

2024-04-19 02:44:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个Django应用程序,虽然我对Django有点熟悉,但对JavaScript却相当陌生。我在我的一个页面中添加了几行JavaScript,以便包含一个地图。在

这个脚本只包含初始化地图,然后根据数据库中保存的信息添加标记。在

既然代码太少,那么将脚本保留在HTML模板中并使用{{info}}从数据库传递信息是否仍然被认为是不好的做法?在

如果是这样,你认为什么方法更好?在


Tags: django代码标记info脚本模板信息数据库
3条回答

我假设您的建议是将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库可以很容易地做到这一点。在

这种方法的一些优点

  • 您的代码(JS部分)独立于数据部分(JSON数据)
  • 您可以轻松地查看/测试输入到JSON中的内容,因为它只是一个httpget请求
  • 您的HTML/JS部分是完全静态的,因此可缓存,从而提高了加载页面的性能。在
  • Python数据到JSON的转换非常简单(没有插值功夫)

是的,那是个坏习惯。在

考虑按照django官方文档页面上的描述为您的应用定义静态文件夹:Managing static files,并通过static template tag上传您的js。在

您可以通过创建单独的django视图来获取{{ info }}变量中的数据,该视图将返回JsonResponse,然后执行AJAX请求从新创建的dd js文件中获取所需的数据。在

在我的Django项目中,如果我使用的是每隔一个模板扩展的“base”模板,我只需在HTML中的<head></head>内放置一个名为“extrahead”的块。在

<html>
    <head>
        ........ other header stuff
        ........ include other scripts
        {% block extrahead %}
        {% endblock %}
    </head>
    .............
</html>

。。。然后在你想要地图的模板中使用这个块。假设它只是静态js代码?在

相关问题 更多 >