【问题标题】:Static css and js loads when using STATICFILES_DIRS not STATIC_URL使用 STATICFILES_DIRS 而不是 STATIC_URL 时加载静态 css 和 js
【发布时间】:2019-09-24 06:55:35
【问题描述】:

我的 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是,

上图中我的目录根目录

-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')]

【问题讨论】:

    标签: python html django pycharm


    【解决方案1】:

    希望有一些澄清:

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

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

    我还为此写了blog post

    【讨论】:

    • 感谢您阐明开发中生产广告的不同设置工作方式
    猜你喜欢
    • 1970-01-01
    • 2015-09-28
    • 2017-05-07
    • 2016-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2016-09-29
    • 2018-02-03
    相关资源
    最近更新 更多