【问题标题】:Django pipeline - How to serve static files after running collectstatic?Django 管道 - 运行 collectstatic 后如何提供静态文件?
【发布时间】:2015-05-17 04:09:08
【问题描述】:

我的项目结构

|- myProject
    |- manage.py
    |- myProject
        |- settings.py
        |- static // This is my STATIC_ROOT
    |- myApp
        |- static // This is where I edit and save my static files

所以我运行 collectstatic 命令。我的 css/js 文件被收集(并压缩为单个文件)到 STATIC_ROOT 目录(myProject/myProject/static)中。到目前为止一切顺利。

第一个问题:我如何为他们服务?

我尝试调用 http://127.0.0.1:8000/static/css/styles.css,但它返回 404 文件未找到错误。

我尝试在 STATICFILES_DIRS 中添加 STATIC_ROOT,但随后出现错误:

STATICFILES_DIRS 设置不应包含 STATIC_ROOT 设置。

第二个问题:Django 能否提供“项目范围”的静态文件?

我知道您可以通过调用“/static/myApp/my-static-file.css”来提供“应用程序范围”的静态文件。 但是 Django 是否像了解每个应用程序内的静态文件夹一样了解 myProject/myProject/static?还是需要明确说明?

我读过一些博客/论坛帖子说您需要将 urls.py 更改为,但我尝试过,但没有成功。我必须这样做吗?

我发现在 Django 的文档中很难找到有关静态文件的信息,我现在很困惑。


编辑:现在我真的很困惑:我尝试设置 PIPELINE_ENABLED = False,现在这个 url 有效。 http://127.0.0.1:8000/static/css/styles.css 但它没有帮助,因为当 PIPELINE_ENABLED 为 False 时,它​​不会尝试调用压缩的 css,而是单独调用所有文件。

【问题讨论】:

  • 您如何为 django 提供服务(例如,根据您使用的 URL,我猜测是通过 runserver,而不是通过 apache/nginx/etc。)您是否在调试模式下运行?
  • 是的,我正在使用 runserver 运行 django。是的,我有 DEBUG = True
  • 如果您正在运行 django 服务器,它将从 static_root 服务(假设一切都已正确配置)。 collectstatic 用于在反向代理可以找到它们的地方获取所有静态文件。您需要为此配置反向代理。 Django 服务器不是为在生产环境中运行而设计的,因此在发布站点时需要额外的配置。

标签: python django static django-pipeline collectstatic


【解决方案1】:

我需要设置 DEBUG = True 和 PRODUCTION = False 才能让它为静态文件提供服务。只是 DEBUG = True 不会这样做。

【讨论】:

    猜你喜欢
    • 2020-02-13
    • 2017-02-15
    • 2020-01-15
    • 1970-01-01
    • 2014-07-06
    • 2018-08-26
    • 2012-03-19
    • 2017-07-18
    • 1970-01-01
    相关资源
    最近更新 更多