使用模板标签时如何将 JavaScript 放在 Django 页面的底部?

iso*_*ism 3 javascript django templatetags

雅虎加速网站的最佳实践指出:

将脚本放在底部

我的 Django 应用程序中有两种类型的脚本:

  1. 我的基本(例如继承)模板中包含的脚本;和
  2. 在模板标签实例化的模板内编写的脚本

支持 UI 控件的脚本必然是模板的一部分,因为它们的支持模板标记可以处理唯一 ID 之类的内容并将相关代码保持在一起。

问题是,如果我遵循雅虎的建议并将库 (#1) 放在页面底部,则 100% 内联包含的脚本 (#2) 将失败,因为库尚未加载和解析。

我无法在基本模板中扩展 {% block %} 元素,因为我在 templatetag 上下文中所做的任何操作都不会传播到它之外 - 按照设计,以避免变量名称冲突(根据 Django 的文档)。

有谁知道如何将 JavaScript 从模板标签的模板中推迟到在基本模板的底部呈现?

Ken*_*ane 5

我通常有一个像这样的基本模板设置。

<html>
<head>

{% block js-head %} Tags that need to go up top  {% endblock js-head %}

</head>
<body>
{% block header %}  Header {% endblock header %}

{% block body %} Body goes here {% endblock body %}

{% block footer %}  Footer {% endblock footer %}

{% block js-foot %}  All other javascript goes here {% endblock js-foot %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

然后我可以扩展这个基本模板并只覆盖我关心的块。我将所有不必放在 js-foot 标头中的 javascript 放在了 js-foot 中,因为它位于模板的底部,所以它将最后加载。如果您必须移动 javascript 加载的位置,您只需在基本模板中移动 js-foot 块即可。

没什么特别的,但是很有效。

  • 如果使用“include”模板标记调用的任何模板部分中有 Javascript,则此方法将失败。这些包含文件无法将其 HTML 附加到主模板中的任何块。 (2认同)