【发布时间】:2013-01-06 11:48:49
【问题描述】:
我有一个MyApp/static/MyApp 目录。
当我运行 ./manage.py collectstatic 时,我希望将 MyApp 目录复制到 STATIC_ROOT,但它没有。
我也有DownloadedApp/static/DownloadedApp,并将其复制到STATIC_ROOT fine。
我错过了什么?
【问题讨论】:
我有一个MyApp/static/MyApp 目录。
当我运行 ./manage.py collectstatic 时,我希望将 MyApp 目录复制到 STATIC_ROOT,但它没有。
我也有DownloadedApp/static/DownloadedApp,并将其复制到STATIC_ROOT fine。
我错过了什么?
【问题讨论】:
您缺少将要复制静态文件的 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
它会在你的目录中为你创建一个静态文件文件夹
【讨论】:
如果您已经为静态正确设置了所有内容并且您正在使用nginx,则输入此命令
sudo nginx -t
您将看到 error 为什么您的静态文件没有被提供并修复该特定错误
就我而言,我在nginx config 中给出了错误的路径
location /static {
root /home/ubuntu/myproject/app/static/;
}
【讨论】:
只需这样做并让命名约定相同
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
static 目录包含您的所有项目资产
assets目录会在你运行这个cmd时自动创建
python3 manage.py collectstatic
这会将所有静态文件夹内容复制到资产文件夹中
希望这会有所帮助:)
【讨论】:
一个快速的解决方法是:
python manage.py collectstatic,它会发现什么都没有
在您的静态文件夹中,并将复制所有静态文件。【讨论】:
我的印象是比较是基于内容的。结果证明是基于日期的。所以,不要在collecstatic之后乱弄你的文件。
【讨论】:
这发生在我身上,因为在调查某些日期发生的错误时,更改了我的计算机日期和时间。
因此它扰乱了诸如 collectstatic 之类的东西,以及我的浏览器历史记录。
不要更改您的计算机日期和时间。
【讨论】:
这只是发生在我身上,我不小心将应用程序的静态文件目录放在了 .gitignore 文件中。所以在我的本地机器上它收集得很好,但在生产中静态文件实际上丢失了(gitignored)。
【讨论】:
.slugignore 文件中,而不是在 .gitignore 中
collectstatic 时,它会将各个应用程序的静态文件夹复制到项目的静态文件夹中。如果您 gitignored 应用程序的静态文件夹,它不会被推送到生产环境中,因此不会被收集。
您的settings.py 中的STATIC_ROOT、STATICFILES_FINDERS 和STATICFILES_DIRS 是什么?
当collectstatic 运行时,默认STATICFILES_FINDERS 值django.contrib.staticfiles.finders.FileSystemFinder 将从STATICFILES_DIRS 中的任何路径收集您的静态文件。
另一个默认的STATICFILES_FINDERS 值django.contrib.staticfiles.finders.AppDirectoriesFinder 将在INSTALLED_APPS 中任何应用程序的/static/ 文件夹中查找。
找到的所有静态文件都将放在指定的STATIC_ROOT目录中。
Check out this link to the collectstatic docs
And this link an explanation of the various static settings in settings.py
您还可以使用python manage.py findstatic 来查看collectstatic 将查看哪些目录。
【讨论】:
python manage.py findstatic 呈现Error: Enter at least one static file.
python manage.py findstatic -v 3 dummy 会输出出错后的路径。