在 Django 中找不到静态文件错误

static files not found error in django

我知道这个问题已经在这里问过好几次了。我已经搜索并阅读了许多答案,但没有帮助。我想,我错过了一些非常基本的东西。

在我的 settings.py 中,我有:

STATIC_URL = '/static/'
STATIC_ROOT = join(APPS_DIR, "static/")
# STATICFILES_DIRS = [join(APPS_DIR, 'static')]

MEDIA_ROOT = join(APPS_DIR, 'media')
MEDIA_URL = "/media/"

在我的 config/urls.py 中,我有:

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我有一个位于 /static/core/js/jquery_countdown/jquery.countdown.min.js 的文件,我正尝试将其加载到模板中,如下所示:

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

<script type="text/javascript" src="{% static 'core/js/jquery_countdown/jquery.countdown.min.js' %}"> </script>

同一个模板的顶部看起来像

{% extends "contest/base.html" %}
{% load static %}

这会导致以下服务器错误:

[23/Mar/2018 10:12:08] "GET /static/core/js/jquery_countdown/jquery.countdown.min.js HTTP/1.1" 404 1858

我错过了什么?

您只在应用程序目录中搜索静态文件,但您的文件在全局静态文件中。您应该使用注释 STATICFILES_DIRS 设置来指定搜索静态文件的所有位置。

在您的应用程序目录中创建文件夹 static_files。并将所有静态文件放入其中。然后使用以下设置

STATIC_URL = '/static/'
STATIC_ROOT = join(APPS_DIR, "static/")
STATICFILES_DIRS = [join(APPS_DIR, 'static_files')]

如果它不能解决您的问题,那么 运行 命令 python manage.py collectstatic。它会将所有静态文件(不仅来自您的应用程序,还来自 django 管理员、第三方应用程序等)复制到 STATIC_ROOT 文件夹。

详情

对于本地服务,django 服务器将查看 STATICFILES_DIRS。所以你不需要 运行 python manage.py collectstatic 命令。所有外部应用程序都可能在放置静态文件的地方有 STATICFILES_DIRS。对于生产服务器,您需要将分散在所有应用程序周围的所有这些静态文件收集到一个地方。这就是 python manage.py collectstatic 命令的作用。它将所有静态文件复制到 STATIC_ROOT 目录