Django如何使用带有static /模板的npm模块

时间:2018-07-13 13:03:31

标签: django npm gulp frontend django-staticfiles

我最近将 npm 添加到了我的项目中,以便更好地跟踪我的js依赖项。以前我只是git克隆到我的static / vendor文件夹。

我还添加了 gulp ,但是现在只在做世界性的事情了。看起来很简单-它可以监视文件,缩小资产,编译Sass。最终,我可能会切换到 Webpack ,但是gulp很简单并且可以立即使用。我不想使用 django-compressor django-pipeline


因此,假设我运行npm install vis来插入visjs。它将添加到node_modules,并将记录添加到package.json依赖项。

A)我是否在模板脚本的node_mods中直接引用vis / dist?

<script src="/node_modules/vis/dist/min-vis.js' %}"></script>

# right now it's <script src="{% static 'vendor/min-vis.js' %}"></script

B) gulp是否应该侦听package.json依赖项的更改,并在看到更改后将vis / dist复制到static / vendor或static / js?


当人们谈论npm和gulp时,我一直看到人们谈论处理STATICFILE_DIRS。现在我的只是设置为以下内容。会改变吗?

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

1 个答案:

答案 0 :(得分:1)

STATICFILES_DIRS告诉Django在哪里可以找到所有静态资产(稍后将“收集”用于部署,但是暂时我们可以忽略它)。该设置将需要包括您已gulp放置处理过的资产的任何位置,或者您也可以将它们放入$BASE_DIR/static中,以避免在需要时更改设置。

从那里开始,您应该使用static templatetag

{% load static %}
<script src="{% static 'your_bundled_asset.min.js' %}"></script>

请注意,如果您的资产位于嵌套目录的STATICFILES_DIRS下,则可能需要添加前缀。 {% static 'js/asset.min.js' %}

因此Django在部署时可以使用开发位置($BASE_DIR/static)或“收集”位置(./manage.py collectstatic --noinput将所有静态文件拉到一个位置以简化服务)。