Django 2 / Python 3.6.3 STATIC_ROOT和Windows上的JavaScript

问题描述 投票:0回答:1

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
    |           |. . .

这一定是我的错,但我没看到我搞砸了。

django python-3.6
1个回答
1
投票

问题#1:STATIC_ROOT vs. STATICFILES_DIRS


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

文档上有一个警告:

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

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.