Django 中 STATIC_URL 和 STATIC_ROOT 有什么区别?
What's the difference between STATIC_URL and STATIC_ROOT in Django?
对于 Django 的 'staticfiles'
应用程序中 STATIC_URL 和 STATIC_ROOT 之间的区别,我有些困惑。
我相信我理解 STATIC_ROOT
是什么:它本质上是服务器上的位置,staticfiles 的 collectstatic
命令将放置从您的 django 项目收集的静态文件。 collectstatic
命令在您在 STATIC_FINDERS
设置中指定的位置搜索。
然而,STATIC_URL
到底是做什么的?这应该设置成什么?显然,它旨在进行设置,以便用户可以访问静态文件。但是和STATIC_ROOT
有什么关系呢?
为什么 STATIC_URL
的默认值只是 /static/
? STATIC_URL
是否必须能够引用 STATIC_ROOT
?
正如您提到的,从文档中可以清楚地看出:
STATIC_ROOT:
The absolute path to the directory where collectstatic
will collect static files for deployment.
STATIC_URL
default: None
URL to use when referring to static files located in STATIC_ROOT
.
Example: "/static/"
or "http://static.example.com/"
而 STATIC_ROOT
只是收集静态文件的目录的路径,STATIC_URL
是将提供这些静态文件的 URL。
而且,正如您在示例中看到的,您可以将 STATIC_URL
定义为子域 "http://static.example.com/"
,当您在模板中使用它时:
<link rel="stylesheet" href="{{ STATIC_URL }}css/base.css" type="text/css" />
它将被视为:
<link rel="stylesheet" href="http://static.example.com/css/base.css" type="text/css" />
但是,如果 STATIC_URL
只是 /static/
那么上面的 link 将指向:
<link rel="stylesheet" href="/static/css/base.css" type="text/css" />
并且,由于此 href
以 /
开头,它将附加您的域以访问静态文件:http://yourdomain/static/css/base/css
Why is the default value of STATIC_URL
simply /static/
? Does STATIC_URL have to be able to reference STATIC_ROOT
?
STATIC_URL
的默认值不是 /static/
,而是 None,如您在文档中所见。而且,它不必引用 STATIC_ROOT
因为它不依赖于它(如上例所示)。
STATIC_URL
is simply the prefix or url that is prepended to your static files and is used by the static
method in Django templates mostly. For more info, read this.
STATIC_ROOT
是你在运行collectstatic
.
时部署静态文件的目录或位置
因此,当您将 STATIC_URL
定义为 /static/
时,您的用户将请求来自 /static/file-name.example
(您服务器上的相对 URL)的静态文件。
如果您已自定义 collectstatic
以将静态文件部署到另一台服务器,则可以将 STATIC_URL
设置为 https://static.example.org/
。
然后,您将在 https://static.example.org/filename.ext
访问您的文件。
我的另一个示例是使用 Boto S3 库将静态和媒体内容上传到 Amazon S3。我的 STATIC_URL
看起来像这样:
STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
它构建了一个像这样的静态 URL 前缀 //mycloudfront.whatever/static/
因此用户将从我们的 CDN 提供文件。
然而我的 STATIC_ROOT
定义为:
STATIC_ROOT = '/%s/' % STATIC_S3_PATH
...因为我需要将我的内容上传到 Amazon S3 而不是 Cloudfront。
STATIC_ROOT
是 collectstatic
命令将收集您所有资产的地方。此内容直接包含 INSTALLED_APPS
中列出的所有应用程序(来自它们自己的 static
文件夹)的所有静态资产以及 STATICFILE_DIRS
.
中提到的任何文件位置
收集完所有这些资产后,为了让 django 创建 url,您需要告诉它这些资产的基础 URL 是什么,即 STATIC_URL
设置,它必须总是以斜杠结尾。
对于 Django 的 'staticfiles'
应用程序中 STATIC_URL 和 STATIC_ROOT 之间的区别,我有些困惑。
我相信我理解 STATIC_ROOT
是什么:它本质上是服务器上的位置,staticfiles 的 collectstatic
命令将放置从您的 django 项目收集的静态文件。 collectstatic
命令在您在 STATIC_FINDERS
设置中指定的位置搜索。
然而,STATIC_URL
到底是做什么的?这应该设置成什么?显然,它旨在进行设置,以便用户可以访问静态文件。但是和STATIC_ROOT
有什么关系呢?
为什么 STATIC_URL
的默认值只是 /static/
? STATIC_URL
是否必须能够引用 STATIC_ROOT
?
正如您提到的,从文档中可以清楚地看出:
STATIC_ROOT:
The absolute path to the directory where
collectstatic
will collect static files for deployment.STATIC_URL
default: None
URL to use when referring to static files located in
STATIC_ROOT
.Example:
"/static/"
or"http://static.example.com/"
而 STATIC_ROOT
只是收集静态文件的目录的路径,STATIC_URL
是将提供这些静态文件的 URL。
而且,正如您在示例中看到的,您可以将 STATIC_URL
定义为子域 "http://static.example.com/"
,当您在模板中使用它时:
<link rel="stylesheet" href="{{ STATIC_URL }}css/base.css" type="text/css" />
它将被视为:
<link rel="stylesheet" href="http://static.example.com/css/base.css" type="text/css" />
但是,如果 STATIC_URL
只是 /static/
那么上面的 link 将指向:
<link rel="stylesheet" href="/static/css/base.css" type="text/css" />
并且,由于此 href
以 /
开头,它将附加您的域以访问静态文件:http://yourdomain/static/css/base/css
Why is the default value of
STATIC_URL
simply/static/
? Does STATIC_URL have to be able to referenceSTATIC_ROOT
?
STATIC_URL
的默认值不是 /static/
,而是 None,如您在文档中所见。而且,它不必引用 STATIC_ROOT
因为它不依赖于它(如上例所示)。
STATIC_URL
is simply the prefix or url that is prepended to your static files and is used by the static
method in Django templates mostly. For more info, read this.
STATIC_ROOT
是你在运行collectstatic
.
因此,当您将 STATIC_URL
定义为 /static/
时,您的用户将请求来自 /static/file-name.example
(您服务器上的相对 URL)的静态文件。
如果您已自定义 collectstatic
以将静态文件部署到另一台服务器,则可以将 STATIC_URL
设置为 https://static.example.org/
。
然后,您将在 https://static.example.org/filename.ext
访问您的文件。
我的另一个示例是使用 Boto S3 库将静态和媒体内容上传到 Amazon S3。我的 STATIC_URL
看起来像这样:
STATIC_URL = '//%s/%s/' % (CLOUDFRONT_DOMAIN, STATIC_S3_PATH)
它构建了一个像这样的静态 URL 前缀 //mycloudfront.whatever/static/
因此用户将从我们的 CDN 提供文件。
然而我的 STATIC_ROOT
定义为:
STATIC_ROOT = '/%s/' % STATIC_S3_PATH
...因为我需要将我的内容上传到 Amazon S3 而不是 Cloudfront。
STATIC_ROOT
是 collectstatic
命令将收集您所有资产的地方。此内容直接包含 INSTALLED_APPS
中列出的所有应用程序(来自它们自己的 static
文件夹)的所有静态资产以及 STATICFILE_DIRS
.
收集完所有这些资产后,为了让 django 创建 url,您需要告诉它这些资产的基础 URL 是什么,即 STATIC_URL
设置,它必须总是以斜杠结尾。