【问题标题】:Using relative vs absolute URL for STATIC_URL in Django在 Django 中为 STATIC_URL 使用相对与绝对 URL
【发布时间】:2013-05-15 19:22:01
【问题描述】:

我正在尝试为新的 Django 项目设置适当的 STATIC_URL 和 STATIC_ROOT 值,但在为 STATIC_URL 使用绝对 URL 时遇到了问题。

我的项目结构如下:

<project root>
    static
    media
    src
        <apps>
        static
            js
            css
                custom.css
            i
        settings.py

在我的 settings.py 中,我有

STATIC_ROOT = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '../static/'))

如果我设置STATIC_URL = '/static/',那么我可以完美访问http://localhost:8000/static/css/custom.css

但是,如果我使用像 STATIC_URL = 'http://localhost:8000/static/' 这样的绝对 URL,就像我使用的是 CDN 一样,那么 http://localhost:8000/static/css/custom.css 会返回 404 错误。

这些设置不应该实际上是相同的吗? docs 状态 STATIC_URL 可以是绝对的。为什么后期设置加载静态媒体失败?

【问题讨论】:

    标签: python django


    【解决方案1】:

    我假设您使用django.conf.urls.static 中的static 函数在开发环境中提供静态文件(即DEBUG=True)。现在,正如您在文档中看到的那样,此功能不适用于启用 DEBUG 的绝对网址。

    所以来自文档:

    https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-during-development

    “此辅助函数仅在调试模式下有效,并且仅当给定前缀是本地前缀(例如 /static/)而不是 URL(例如 http://static.example.com/)时才有效。”

    【讨论】:

      【解决方案2】:

      我刚刚测试了同样的东西,使用 http://localhost:8000/static/ 对我也不起作用。

      在我的设置中,我保留了一个开发变量,因此在 localhost 上,url 是“/static/”,当我部署时(并且我设置了 DEVELOPMENT = False),它是一个完整的 url。

      if DEVELOPMENT == True:
          STATIC_URL = '/static/'
      else:
          STATIC_URL = 'https://www.mywebsite.com/static/'
      

      【讨论】:

      • 我最终做了类似的事情,但我根据进程的用户名切换,所以我不必担心设置变量。
      【解决方案3】:

      原因和解决方案很简单,但是根据我描述问题的方式发现它是不直观的。我没有提到我的绝对 STATIC_URL 实际上有一个不同的域(http://localmedia:8000/static/ 不是 http://localhost:8000/static/)。

      我这样做是为了简化我用来测试各种版本的 IE 的几台外部开发 Windows 机器之间的媒体托管。

      但是,当 STATIC_URLrunserver's 本地域中的域不匹配时,Django 仅提供来自 STATIC_ROOT 的内容,并且不会尝试从应用程序文件夹中检索媒体。不知道为什么,但就是这样。

      如果我运行manage.py collectstatic,它将通过将所有应用程序文件夹媒体复制到我的 STATIC_ROOT 来有效地修复 404 错误。或者,我可以在 STATIC_URL 中使用相同的域,Django 会自动在应用文件夹中查找任何未收集的媒体。

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 2011-10-24
        • 2015-10-16
        • 1970-01-01
        • 2019-05-10
        相关资源
        最近更新 更多