Python 什么';Django中静态URL和静态根的区别是什么?
对于Django的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
“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