正如您所提到的,从文档中可以很清楚地看到:
STATIC_ROOT:
collectstatic
将收集用于部署的静态文件的目录的绝对路径。
STATIC_URL
默认值:None
用于引用位于STATIC_ROOT
中的静态文件的URL。
示例:"/static/"
或"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 rel="stylesheet" href="/static/css/base.css" type="text/css" />
因为这个 href
以 /
开头,所以它会将您的域名附加在访问静态文件时:http://yourdomain/static/css/base.css
为什么STATIC_URL
的默认值是简单的/static/
?STATIC_URL
是否必须能够引用STATIC_ROOT
?
STATIC_URL
的默认值不是/static/
而是None
,如文档中所示。而且,它不必引用STATIC_ROOT
,因为它不依赖于它(如上面的示例所示)。
STATIC_URL = '/static/abcd/'
,基本上只是任意路径,Django 仍然正确获取静态文件。例如,它正在使用<link rel="stylesheet" href="/static/abcd/css/app.css" type="text/css">
提供 CSS 文件,如 DevTools 中所示,尽管我的系统上没有这样的目录。我的 CSS 文件位于common_static/css/app.css
,并收集到static/css/app.css
。所以这大大扰乱了我对STATIC_URL
工作原理的理解。这怎么可能呢? - ruslaniv