使用STATICFILES_DIRS而不是STATIC_URL时,静态CSS和JS会加载

时间:2019-05-06 15:50:19

标签: python html django pycharm

我的settings.py是

STATIC_URL = '/some_location/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

我的urls.py

urlpatterns = [ multiple path ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

我的具有目录结构的基本.html是

enter image description here

我的目录根源于上图

-project directory
-->appname
-->static
---->css
------>master.css
---->js
----->master.js

我使用pycharm IDE。

The error message I get is 

"GET /some_location/static/js/master.js HTTP/1.1" 404 1736
"GET /some_location/static/css/master.css HTTP/1.1" 404 1742

在浏览器中使用以上位置/some_location/static/js/master.js时,我会看到文件内容。

如何在Pycharm的开发服务器上正确加载.css.js

更新1:

这似乎奏效,但不确定原因。有人可以阐明为什么一个有效但另一个无效

STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(BASE_DIR, 'static')

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]

1 个答案:

答案 0 :(得分:1)

希望这里有一些澄清:

  • STATIC_URL告诉Django在呈现{% static %}链接时应该为静态文件的所有链接添加哪个URL。对于开发而言,将其设置为/static/是最简单的。在您的生产设置中,它可能指向CDN后面的云提供商网址(例如https://my-cdn.cloudflare.net/static/)。
  • STATIC_ROOT告诉collectstatic管理命令在哪里将项目的所有静态文件复制到哪里。这通常与开发机器无关(您可以直接从项目中提供静态文件),但与在生产环境中进行部署有关:您需要将所有静态文件复制到以下位置:外部您的项目目录(例如Amazon S3之类的云存储桶)。
  • 您的静态文件应位于每个应用程序内部的{strong>内部目录中(即static目录中的appname/static)。如果您在项目BASE_DIR中也有一个单独的目录,例如static,则可以使用STATICFILES_DIRS告诉Django。这告诉runserver也要看那里。在生产中,它告诉collectstatic从哪里收集所有静态文件。

因此,总结一下:STATIC_URL/path_to/my_file是用户在浏览器中看到的URL,使用内置的Django运行服务器时,STATIC_URL被剥离,path_to/my_file在所有应用程序中搜索静态目录和STATICFILES_DIRS中列出的目录。

我还为此写了blog post