【问题标题】:Why won't collectstatic copy my static files?为什么 collectstatic 不复制我的静态文件?
【发布时间】:2013-01-06 11:48:49
【问题描述】:

我有一个MyApp/static/MyApp 目录。

当我运行 ./manage.py collectstatic 时,我希望将 MyApp 目录复制到 STATIC_ROOT,但它没有。

我也有DownloadedApp/static/DownloadedApp,并将其复制到STATIC_ROOT fine

我错过了什么?

【问题讨论】:

    标签: django static


    【解决方案1】:

    您缺少将要复制静态文件的 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
    

    它会在你的目录中为你创建一个静态文件文件夹

    【讨论】:

      【解决方案2】:

      如果您已经为静态正确设置了所有内容并且您正在使用nginx,则输入此命令

      sudo nginx -t
      

      您将看到 error 为什么您的静态文件没有被提供并修复该特定错误

      就我而言,我在nginx config 中给出了错误的路径

      location /static {
              root /home/ubuntu/myproject/app/static/;
          }
      

      【讨论】:

        【解决方案3】:

        只需这样做并让命名约定相同

        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
        

        这会将所有静态文件夹内容复制到资产文件夹中

        希望这会有所帮助:)

        【讨论】:

        • 我按照完全相同的步骤,但它没有复制资产文件夹中的文件
        【解决方案4】:

        一个快速的解决方法是:

        1. 转到您项目的文件目录并重命名您的项目 'static' 文件夹到其他类似 'static-old'
        2. 在您的项目目录中创建一个名为“static”的新空文件夹
        3. 现在如果你运行python manage.py collectstatic,它会发现什么都没有 在您的静态文件夹中,并将复制所有静态文件。

        【讨论】:

          【解决方案5】:

          我的印象是比较是基于内容的。结果证明是基于日期的。所以,不要在collecstatic之后乱弄你的文件。

          【讨论】:

            【解决方案6】:

            这发生在我身上,因为在调查某些日期发生的错误时,更改了我的计算机日期和时间。

            因此它扰乱了诸如 collectstatic 之类的东西,以及我的浏览器历史记录。

            不要更改您的计算机日期和时间。

            【讨论】:

              【解决方案7】:

              这只是发生在我身上,我不小心将应用程序的静态文件目录放在了 .gitignore 文件中。所以在我的本地机器上它收集得很好,但在生产中静态文件实际上丢失了(gitignored)。

              【讨论】:

              • 这发生在我身上,但在 Heroku 中,在 .slugignore 文件中,而不是在 .gitignore
              • 这对我来说毫无意义:collectstatic 在运行时不会创建那些目录吗?我有同样的问题(一遍又一遍,似乎出于不同的原因)
              • @lysdexia 您必须区分应用程序的静态文件夹和项目的静态文件夹。当您运行collectstatic 时,它会将各个应用程序的静态文件夹复制到项目的静态文件夹中。如果您 gitignored 应用程序的静态文件夹,它不会被推送到生产环境中,因此不会被收集。
              【解决方案8】:

              您的settings.py 中的STATIC_ROOTSTATICFILES_FINDERSSTATICFILES_DIRS 是什么?

              collectstatic 运行时,默认STATICFILES_FINDERSdjango.contrib.staticfiles.finders.FileSystemFinder 将从STATICFILES_DIRS 中的任何路径收集您的静态文件。

              另一个默认的STATICFILES_FINDERSdjango.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 将查看哪些目录。

              【讨论】:

              • django cached static_root static_url settings.py 不会反映我在文件中所做的更改。
              • python manage.py findstatic 呈现Error: Enter at least one static file.
              • @antonagestam python manage.py findstatic -v 3 dummy 会输出出错后的路径。
              猜你喜欢
              • 1970-01-01
              • 2020-06-08
              • 2018-11-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多