Python 什么';Django中静态URL和静态根的区别是什么?

Python 什么';Django中静态URL和静态根的区别是什么?,python,django,django-staticfiles,Python,Django,Django Staticfiles,对于Django的“staticfiles”应用程序中的静态URL和静态根目录之间的区别,我有些困惑 我相信我理解了STATIC\u ROOT是什么:它本质上是服务器上的一个位置,staticfiles的collectstatic命令将放置从django项目收集的静态文件。collectstatic命令在您在STATIC\u FINDERS设置中指定的位置进行搜索 然而,静态URL到底做什么?该设置为什么?显然,它的目的是设置用户可以访问静态文件的内容。但是它与静态根的关系是什么呢 为什么STA

对于Django的
“staticfiles”
应用程序中的静态URL和静态根目录之间的区别,我有些困惑

我相信我理解了
STATIC\u ROOT
是什么:它本质上是服务器上的一个位置,staticfiles的
collectstatic
命令将放置从django项目收集的静态文件。
collectstatic
命令在您在
STATIC\u FINDERS
设置中指定的位置进行搜索

然而,
静态URL
到底做什么?该设置为什么?显然,它的目的是设置用户可以访问静态文件的内容。但是它与静态根的关系是什么呢


为什么
STATIC\u URL
的默认值只是
/STATIC/
STATIC\u URL
是否必须能够引用
STATIC\u ROOT

如您所述,从文档中可以清楚地看到:

静态\u根:

collectstatic
将收集静态文件以进行部署的目录的绝对路径

静态URL

默认值:无

引用位于
static\u ROOT
中的静态文件时使用的URL

示例:
“/static/”
”http://static.example.com/“

虽然,
STATIC\u ROOT
只是收集静态文件的目录的路径,
STATIC\u URL
是为这些静态文件提供服务的URL

并且,正如您在示例中所看到的,您可以将
静态URL
定义为子域
”http://static.example.com/“
在模板中使用时:

<link rel="stylesheet" href="{{ STATIC_URL }}css/base.css" type="text/css" />
而且,由于此
href
/
开头,它将附加您的域以访问静态文件:
http://yourdomain/static/css/base/css


为什么
STATIC\u URL
的默认值只是
/STATIC/
?静态URL是否必须能够引用
STATIC\u ROOT

STATIC\u URL
的默认值不是
/STATIC/
,而是您在文档中看到的无。而且,它不必引用
STATIC\u ROOT
,因为它不依赖于它(如上面的示例所示)。

只是在静态文件前面加上的前缀或url,Django模板中的
STATIC
方法主要使用它。欲了解更多信息,请阅读

是运行
collectstatic
时部署静态文件的目录或位置

因此,当您将
静态URL
定义为
/STATIC/
时,您的用户将从
/STATIC/file name.example
(服务器上的相对URL)请求静态文件

如果您自定义了
collectstatic
以将静态文件部署到另一台服务器,则可以将
static\u URL
设置为
https://static.example.org/

然后,您可以在
https://static.example.org/filename.ext

我举的另一个例子是使用Boto S3库将静态和媒体内容上传到AmazonS3。我的
静态URL
如下所示:

STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
它构造了一个静态URL前缀,如下所示
//mycloudfront.whatever/static/
,这样用户就可以从我们的CDN获得文件

但是,My
静态_ROOT
的定义如下:

STATIC_ROOT = '/%s/' % STATIC_S3_PATH

…因为我需要将我的内容上载到Amazon S3,而不是Cloudfront。

STATIC\u ROOT
是通过
collectstatic
命令收集所有资产的地方。此文件的内容直接包含
已安装的应用程序
中列出的所有应用程序的所有静态资产(来自它们自己的
静态
文件夹)以及中提到的任何文件位置


一旦您收集了所有这些资产,为了让django创建URL,您需要告诉它这些资产的基本URL是什么,这是
STATIC\u URL
设置,并且它必须始终以斜杠结尾。

回答得很好。我必须补充,不建议在模板中使用{{STATIC_URL}}。使用{%load static%}。。。{%static'css/main.css%}。但是,正如我刚刚尝试并发现我可以设置
STATIC\u URL='/STATIC/abcd/'
,基本上只是一个任意路径,Django仍然可以正确地获取静态文件。例如,尽管我的系统上没有这样的目录,但它正在为DevTools中看到的
中的CSS文件提供服务。我的CSS文件位于
common_static/CSS/app.CSS
中,并被收集到
static/CSS/app.CSS
。因此,这对我理解
静态URL
的工作原理造成了很大的冲击。这怎么可能?你介意看看吗?
STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
STATIC_ROOT = '/%s/' % STATIC_S3_PATH