【问题标题】:Django 2 / Python 3.6.3 STATIC_ROOT and javascript on WindowsDjango 2 / Python 3.6.3 STATIC_ROOT 和 Windows 上的 javascript
【发布时间】:2018-08-12 15:57:43
【问题描述】:

Python:3.6.3 // Django:2.0.2

我正在编写一个 Django 应用程序。我正在 Windows 上使用 PyCharm 开发它。我在 Windows 上调试它。我正在将它部署到一个 linux 机器上。

Linux 方面的工作正常。 Windows 端似乎忘记了 STATIC 资源。有时应用程序会加载我的项目 css 文件,有时不会。它几乎从不加载项目 js 文件。

我的设置文件的静态部分如下所示:

    STATIC_URL = "/static/"
    STATIC_ROOT = os.path.join(SITE_BASE_DIR, "public/static/")
    STATICFILES_DIRS = [
       # os.path.join(SITE_BASE_DIR, "public/static"),
    ]

此设置在 linux 上运行正常,但 windows 会混淆。

在 Windows 上,如果我取消注释 STATICFILES_DIRS 条目(不注释 STATIC_ROOT),那么 css 和 js 资源似乎可以工作。在 linux 上,它抱怨 STATIC_ROOT 和 STATICFILES_DIRS 中的重复项。

静态结构看起来像

    |-- public
    |   |-- favicon.gif
    |   |-- favicon.ico
    |   `-- static
    |       |-- MyApp
    |       |   |-- css
    |       |   |   `-- index.css
    |       |   `-- js
    |       |       `-- index.js
    |       |-- admin
    |       |   |. . .
    |       `-- django_extensions
    |           |. . .

这一定是我的错,但我看不出我在哪里搞砸了。

【问题讨论】:

  • 你在使用collectstatic吗?
  • 是的,但正如@MichaelB 在下面指出的那样,我是在开发环境中进行的。

标签: django python-3.6


【解决方案1】:

问题 #1:STATIC_ROOTSTATICFILES_DIRS


STATIC_ROOT 不应该是您的静态文件的位置。当你运行 collectstatic 命令时,它会将所有的静态文件放到 STATIC_ROOT 指定的目录中。

文档对此有警告:

这应该是一个最初为空的目标目录,用于将静态文件从它们的永久位置收集到一个目录中,以便于部署;它不是永久存储静态文件的地方。您应该在 staticfiles 的查找器可以找到的目录中执行此操作,默认情况下,这些目录是 'static/' 应用程序子目录以及您包含在 STATICFILES_DIRS 中的任何目录。

如果你将 STATIC_ROOT 设置为与 STATICFILES_DIRS 中的某个位置相同的路径,Django 会向你抱怨,因为如果你真的跑了collectstatic,它会尝试覆盖文件。这基本上就像告诉 Django 将文件从 /public/static/ 复制到 /public/static/,这就是它抛出该错误的原因。

问题 #2:在开发环境中提供静态文件


关于 Windows 找不到静态文件,我的假设是您正试图在开发环境中提供文件(例如 DEBUG = True)。我建议阅读文档中 Serving static files during development 部分的文档来解决这种情况。

【讨论】:

    猜你喜欢
    • 2012-08-25
    • 2023-03-16
    • 2012-01-31
    • 2018-03-05
    • 2012-06-03
    • 2015-05-11
    • 2016-02-24
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多