【问题标题】:django static files not appearing with virtual environmentdjango静态文件没有出现在虚拟环境中
【发布时间】:2018-09-29 05:03:57
【问题描述】:

所以我正在尝试将我的网站投入生产,但我在虚拟环境中遇到了一个问题,我的静态文件找不到(404 错误)。

在 settings.py 文件中,我有STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

在文件 /etc/nginx/sites-available/django 中,我修改了静态文件的位置,如下所示:

location /static {
     alias /home/user/myproject/static;
}

在目录/home/user/myproject 中,我有另一个目录static,里面有几个存放实际静态文件的目录。

即/home/user/myproject/static/shopApp/shop_app.css

即/home/user/myproject/static/officeApp/office_app.css

我想看看我的任何配置是否设置不当。我对 django 和 Web 开发非常陌生,因此我将不胜感激您的任何帮助!

编辑:在做了一些研究之后,我认为我和这个链接中来自 stackoverflow 的人有同样的问题:Fetching static files failed with 404 in nginx

我认为第二个答案可能会解决我的问题,但我不知道在哪里应用命令 chown www-data:www-data .

【问题讨论】:

    标签: django static http-status-code-404 virtualenv


    【解决方案1】:

    STATIC_ROOT 仅适用于您的应用或项目的产品、静态文件夹。 PROD 静态!= 项目静态。例如,您有 10 个应用程序,例如 django admin。如果没有 STATIC_ROOT 和 collectstatic 命令,您需要指向每个应用程序中的每个静态文件夹。 例如 location /static/admin { alias /home/user/myproject/env../admin/static; } location /static/someapp { alias /home/user/myproject/someapp/static; } 但是 Django 为你做了很多工作。您需要指向文件夹,该文件夹收集所有应用程序的所有静态。例如 STATIC_ROOT = os.path.join(BASE_DIR, 'static_remote/') 并运行 collectstatic location /static { alias /home/user/myproject/static_root; }

    【讨论】:

    • 您好,我很困惑我需要指向哪个文件夹,以便 django 收集所有静态文件。另外,您的意思是对于静态位置的别名,我应该将其替换为 static_root 吗?这是解决方案还是我仍然需要指向每个应用程序中的每个静态文件夹?
    • 您需要替换为任何名称,但不是静态的
    • 所以如果我将别名设为/home/user/myproject/static_root;,我是否必须命名包含其他具有静态文件static_root的文件夹的目录?为什么这与我原来使用 static 的情况不同?感谢您的快速回复。
    • 否,STATIC_ROOT const 仅用于生产。查看 django 代码。 Django 使用查找器。当您需要将静态文件放在一个位置时,查找器会尝试在所有应用程序中查找 static 文件夹,该文件夹在 INSTALLED_APPS 中声明。即您创建应用程序并创建名称为static 的文件夹。当你在调试模式下运行django(django有内部服务器)查找器自动获取静态文件的内容,但在生产模式下,nginx无法自行找到这些文件,所以你需要指向每个应用程序中的文件夹或调用collectstatic,这将所有文件收集到一个文件夹中。
    • so STATIC_ROOT = os.path.join(BASE_DIR, 'any name what you want/') 但在您的应用程序中,例如博客、论坛、聊天:博客/静态、论坛/静态/、聊天/静态,不要忘记,我们在一个位置复制 - 您需要不同的子文件夹或不同的静态文件名称以防止重写。例如 blog/static/blog/css[img, js] 或 forum/static/forum/css forum/static/forum/js
    【解决方案2】:

    事实证明,问题出在我的 settings.py 文件上。

    具体来说,当您仍然在虚拟环境(0.0.0.0:8000)中使用 django 开发服务器时,您应该将 DEBUG 设置为 True,以便它可以为您的静态文件提供服务。

    记住!这仅适用于您使用 django development 服务器。对于生产,它应该设置为False

    我从这篇 django 文章中得到了这个信息:https://docs.djangoproject.com/en/2.0/howto/static-files/

    【讨论】:

      猜你喜欢
      • 2021-10-30
      • 2016-06-03
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多