跳转到主要内容

简化django应用中JS文件的管理

项目描述

© 2014-2015 Thomas Khyn, MIT许可证

关于

当您的项目紧密依赖于相对大量的JavaScript代码时,处理它的自然方式是将JavaScript代码分解成几个子脚本。这既提高了可读性,也便于调试。

然而,有时您可能只希望有一个文件(例如在生产中)或者不需要在开发中为每个独立的js文件在模板中建立链接。

django-jsdir通过提供一种方法来自动链接目录树中的js文件,以及包含、排除或排序规则来解决这个问题。在这方面,它比django-pipeline要灵活得多。

django-jsdir已与Django 1.8+和最新兼容的次要Python版本(2.7和3.5)进行了测试。它可能在早期的Django版本中工作,但不保证。

如果您喜欢django-jsdir并希望感谢我/鼓励未来的开发,您可以发送一些mBTC到以下比特币地址:1EwENyR8RV6tMc1hsLTkPURtn5wJgaBfG9

设置

  1. 使用您喜欢的安装方法,例如 pip install django-jsdir

  2. 您需要在您的 INSTALLED_APPS 中同时包含 'jsdir''django.contrib.staticfiles'。请确保将 'jsdir' 放置在 'django.contrib.staticfiles' 之前。

  3. 如果您使用的是 Jinja2,请将 'jsdir.jinja2.ext' 添加到您的 Jinja2 扩展列表中

它是如何工作的

目录连接

一个简短的实际例子比冗长的解释更好。假设您有以下 JS 文件布局

static/js/
    big_script/
        00_init.js
        10_helpers.js
        50_core.js
        99_onload.js

big_script 中的所有文件都是格式良好并带有注释的 JavaScript 文件,非常适合调试。但您必须在模板中包含 big_script 中的每个 js 文件。更糟糕的是,当部署应用程序时,您需要连接/压缩 big_script 目录并相应地更新模板。所有这些都需要完全手动完成。

直到现在。

通过使用 django-jsdir 和一些最小限度的修改,您将不再需要担心这个问题。唯一要做的就是从模板中删除所有指向 big_script/*.js 文件的 <script> 标签,并用以下内容替换

{% jsdir 'big_script' %}

django-jsdir 将处理以下操作

  1. 在开发模式下,从应用程序的静态目录提供文件时,将连接 big_script 目录树下的所有脚本。从开发者的角度来看,这不会带来任何变化,除了他不再需要更新脚本列表。

  2. 将所有嵌套的子脚本连接(可能压缩,在 django-compressor 的帮助下)到一个名为 big_script.dir.js 的文件中,这取决于文件是否已经存在,是在首次请求时或在您运行 manage.py collectstatic

  3. 在生产模式下连接生成的 big_script.dir.js

换句话说,您不需要更改生产模板(或费尽心思寻找一种方法以条件扩展或包含的方式编程实现)并且您不再需要手动连接和/或压缩您的 JS 文件。

includeexclude 关键字

django-jsdir 有方法来细化您想要显式包含或排除的目录中的哪些文件。

请按照如下方式使用它们

{% jsdir 'libs' expand=True include='jquery/jquery.js; jquery-ui/ui/*.js' exclude='effect-*.js' %}

这将加载 jquery.js 和所有 jquery-ui 文件,但不会加载效果文件。

模式

  • 是类似 Unix 的。请参阅 fnmatch

  • 应提供为分号分隔的字符串(每个模式的开始和结尾处的空格都被删除)或,对于 jinja2 模板,作为列表或元组

  • ‘file.js’ 将匹配 ‘file.js’ 和 ‘file.min.js’

name 关键字

name 关键字仅在您多次加载目录时使用,以避免连接时的名称冲突。

例如

{% jsdir 'libs' exclude='jquery-ui/**' %}
{% jsdir 'libs' name='jquery-ui' include='jquery-ui/**' %}

在生产模式下,将创建2个文件 libs.dir.jslibs.jquery-ui.dir.jslibs.dir.js 将包含所有库除了 jquery-ui,而 libs.jquery-ui.dir.js 将只包含 jquery-ui

这在需要生成两个包含不同库且位于同一目录中的文件时尤其有用(例如,当使用 bower 管理JavaScript库时)。

包含目录中的所有文件

有时,您可能希望从目录中导入JavaScript文件,而无需看到它们被完全连接。如果您有一个包含JavaScript库的 'lib' 文件夹,这种情况就适用。在这种情况下,您可以使用标签参数 expand

{% jsdir 'lib/' expand=True %}

在生产(即 DEBUG = False)时,jsdir 会查找脚本的最小化版本(文件名为 *.min.js)并返回相应的HTML标签。如果您不希望这种行为,可以使用标签参数 minified 并将其设置为 False

{% jsdir 'lib' expand=True minified=False %}

请记住,HTML标签在文档中出现的顺序,以及因此JS文件将被加载的顺序仍然是字母顺序。但是,您可以要求 django-jsdir 首先或最后加载某些文件。

firstlast 关键字

如果您想在包含的展开目录中首先加载某些文件,django-jsdir 提供了 firstlast 关键字。

请按照如下方式使用它们

{% jsdir 'lib' expand=True first='1st_pattern; 2nd_pattern' last='verylast_parttern; 2ndtolast_pattern' %}

任何名称与glob模式 '1st_pattern' 匹配的文件都将先于任何名称与 '2nd_pattern' 匹配的文件加载,这些文件将先于任何其他文件加载,这些文件将先于任何名称与 '2ndtolast_pattern' 匹配的文件加载,这些文件将先于任何名称与 'verylast_pattern' 匹配的文件加载。

压缩

如果您希望压缩 big_script.dir.js,django-jsdir 可以轻松地与 django-compressor 集成。在生产中,脚本会像其他JS文件一样被压缩。只需使用

{% compress %}
    {% jsdir 'big_script' %}
{% endcompress %}

设置

JSDIR_JSURL

访问JavaScript文件目录的默认URL,相对于静态文件根目录。默认为 'js'。此前缀可以使用 'absolute' 路径绕过(例如 {% jsdir '/path/to/dir' %})。

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django-jsdir-0.3.1.zip (21.8 kB 查看哈希)

支持者