django 中找不到静态文件错误

Inq*_*abi 3 python django django-staticfiles

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

在我的 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/"
Run Code Online (Sandbox Code Playgroud)

在我的 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)
Run Code Online (Sandbox Code Playgroud)

我有一个文件,/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>
Run Code Online (Sandbox Code Playgroud)

同一模板的顶部看起来像

{% extends "contest/base.html" %}
{% load static %}
Run Code Online (Sandbox Code Playgroud)

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

[23/Mar/2018 10:12:08] "GET /static/core/js/jquery_countdown/jquery.countdown.min.js HTTP/1.1" 404 1858
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

Ane*_*R S 6

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

STATIC_URL = '/static/'
STATIC_ROOT = join(APPS_DIR, "static/")
STATICFILES_DIRS = [join(APPS_DIR, 'static_files')]
Run Code Online (Sandbox Code Playgroud)

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

细节

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