Django,推荐在块中声明和解决JavaScript依赖关系的方法

Django, recommended way to declare and solve JavaScript dependencies in blocks

本文关键字:JavaScript 解决 依赖 关系 方法 声明 Django      更新时间:2023-09-26

有没有一种好的、高性能的和/或推荐的方法来声明和提供 Django 模板中块的 JS 依赖项?

基本上我想做的是这样的:

  1. 在包含块的 Django 模板文件中,声明:我需要 JS 库 X 才能运行。
  2. 在页面的标记
  3. 中,在呈现页面时,插入此库的脚本标记,但不要多次。

原因如下:

  1. 尽量减少页面中包含的不必要的JS库的数量,以保持旧浏览器中可接受的加载时间。(像jquery-ui这样的一些库对于旧的IE来说是非常重量级的)
  2. 防止可能重复加载 JS 库,无论是出于性能和错误预防原因。当您有重复的块或包含相同 JS 库的多个块时,就会发生这种情况。

我已经看到了一些潜在的解决方案,但到目前为止,从性能或清晰度的角度来看,它们都不是很有吸引力。

您可以使用

{% include %}模板标签。如果你将js加载到头中,你可以做这样的事情:

基地.html

<head>
<title>XXXX</title>
    ...
    <script type="text/javascript" src="{{ STATIC_URL}}js/jquery.js"></script>
    ...
{% block site_header %}{% endblock %}
</head>

其他.html

{% extends "base.html" %}
{% block site_header %}
...
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/urlify.js"></script>
..
{% endblock %}

您必须根据需要调整模板/路径/等。

为此,我个人使用 Django关仔。在我的基本模板中,我有这个块:

{% load sekizai_tags %}
<body>
# your own logic here
{% with_data "js-data" as javascripts %}
    {% for javascript in javascripts %}
        <script type="text/javascript" 
        src="{{ STATIC_URL }}{{ javascript }}" ></script>
    {% endfor %}
{% end_with_data %}
</body>

然后,在我的包含或扩展模板中:

{% load sekizai_tags %}
{% add_data "js-data" "myapp/js/script.js" %}

注意你可以定义多个块,也可以将其用于CSS,这是非常方便。

添加带有"add_data"标签的文件永远不会重复,即使添加了多个次。