我有一个MyApp/static/MyApp
目录。
当我运行时./manage.py collectstatic
,我希望将 MyApp 目录复制到STATIC_ROOT
,但事实并非如此。
我也有DownloadedApp/static/DownloadedApp
,它复制到STATIC_ROOT fine
.
我错过了什么?
你的STATIC_ROOT
,STATICFILES_FINDERS
和STATICFILES_DIRS
是settings.py
什么?
运行时collectstatic
,默认STATICFILES_FINDERS
值django.contrib.staticfiles.finders.FileSystemFinder
将从您在STATICFILES_DIRS
.
另一个默认STATICFILES_FINDERS
值django.contrib.staticfiles.finders.AppDirectoriesFinder
将/static/
在您的INSTALLED_APPS
.
找到的所有静态文件都将放在指定的STATIC_ROOT
目录中。
您还可以使用python manage.py findstatic
来查看将查看哪些目录collectstatic
。
这只是发生在我身上,我不小心将应用程序的静态文件目录放在了 .gitignore 文件中。所以在我的本地机器上收集得很好,但在生产中静态文件实际上丢失了(gitignored)。
只需这样做并使命名约定相同
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
静态目录包含您的所有项目资产
当您运行此 cmd 时,资产目录将自动创建
python3 manage.py collectstatic
这会将所有静态文件夹内容复制到资产文件夹中
希望这可以帮助 :)
您缺少将要复制静态文件的 STATIC_ROOT,只需在 settings.py 中添加此行
STATIC_ROOT=os.path.join(BASE_DIR,'staticfiles')
你的 settings.py 看起来像这样:
STATIC_URL = '/static/'
STATIC_ROOT=os.path.join(BASE_DIR,'staticfiles')
#手动添加
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static")
]
记得在 urls.py 中添加 STAIC_ROOT 路径
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path("" ,include("home.urls")),
]+static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
毕竟你可以运行:
python manage.py collectstatic
它将在您的目录中为您创建一个静态文件文件夹
我的印象是比较将基于内容。结果证明是基于日期的。所以,不要在collecstatic
.
如果您已经为静态正确设置了所有内容并且正在使用,请nginx
输入此命令
sudo nginx -t
您将看到error
为什么您的静态文件没有被提供并修复该特定错误
就我而言,我给出了错误的路径nginx config
location /static {
root /home/ubuntu/myproject/app/static/;
}
这发生在我身上,因为在调查某些日期发生的错误时,更改了我的计算机日期和时间。
因此,它扰乱了诸如 collectstatic 之类的东西,以及我的浏览器历史记录。
不要更改您的计算机日期和时间。
一个快速的解决方法是:
python manage.py collectstatic
它,它将看到您的静态文件夹中没有任何内容,并将复制所有静态文件。