【问题标题】:Django development cannot find third party script in node_modulesDjango 开发在 node_modules 中找不到第三方脚本
【发布时间】:2017-10-29 23:58:32
【问题描述】:

我在 Windows 10 上使用 debug = True 的开发环境中工作。

我已经安装了 node 和 npm 并从我的项目的主文件夹运行 npm microm。它创建了一个 node_modules 子文件夹,其中包含一个 microm 文件夹等。所以 microm.js 脚本位于:

f:\roomtemp\node_modules\microm\microm.js

我的设置文件的相关部分是:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
...
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'node_modules')

我的模板包含以下内容:

{% load staticfiles %}
<script src='{% static "/microm/microm.js" %}'></script>

当我尝试加载页面时,Chrome 控制台显示 404,我在服务器控制台中看到:

"GET /static/microm/microm.js HTTP/1.1" 404 1661

我已经阅读了许多似乎包含解决方案的 SO 问题,但到目前为止没有一个有效。我也在互联网上进行了广泛搜索。到目前为止没有运气。任何帮助将不胜感激。

迈克

【问题讨论】:

    标签: django npm


    【解决方案1】:

    首先,我认为您不应该在您的 node_modules 文件夹中使用STATIC_ROOTSTATIC_ROOT 是 django 管理命令 collectstatic 在您准备部署时将所有应用程序中的所有静态文件放入的位置。此过程可能会导致某些文件被覆盖。

    请将 STATIC_URL 恢复为一些合理的值,例如

    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
    

    然后使用STATICFILES_DIRS 设置。这就是告诉 django 在哪些额外位置查找静态文件的原因。

    STATICFILES_DIRS = [os.path.join(BASE_DIR, 'node_modules')]
    

    最后,确保你的STATICFILES_FINDERS 有这些

    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    

    【讨论】:

      猜你喜欢
      • 2019-02-28
      • 2019-04-11
      • 2016-01-21
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-15
      • 2018-11-15
      • 2015-06-16
      相关资源
      最近更新 更多