0

是否有一种好的、高效的和/或推荐的方式来为 Django 模板中的块声明和提供 JS 依赖项?

基本上我想做的是:

  1. 在包含块的 Django 模板文件中,声明:我需要 JS 库 X 才能运行。
  2. 在页面的标签中,在渲染页面时,为这个库插入一个脚本标签,但不要超过一次。

原因:

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

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

4

2 回答 2

0

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

{% 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" %}

注意你可以定义多个block,也可以用在CSS上,非常方便。

即使添加了多次,使用“add_data”标签添加的文件也不会重复。

于 2013-10-05T07:58:24.713 回答
0

您可以使用{% include %}模板标签。如果将 js 加载到标头中,则可以执行以下操作:

base.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 %}

您将不得不调整模板/路径/等。根据您的需要。

于 2013-10-04T15:35:32.573 回答