我的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')]
最佳答案
希望有一些澄清:
-
STATIC_URL
告诉 Django 在渲染时应该为静态文件的所有链接添加哪个 url{% static %}
链接。对于开发来说,最简单的设置为/static/
。在您的生产设置中,它可能会指向 CDN 后面的云提供商 URL(例如https://my-cdn.cloudflare.net/static/
)。 -
STATIC_ROOT
告诉collectstatic
管理命令在哪里复制项目的所有静态文件。这通常与您的开发计算机无关(您直接从项目提供静态文件),但与生产中的部署相关:您需要将所有静态文件复制到外部的位置您的项目目录(例如 Amazon S3 等云存储桶)。 - 您的静态文件应位于
static
内部每个应用程序内的目录(即,在您的情况下为appname/static
目录)。如果您还有一个单独的目录,例如static
直接在你的项目 BASE_DIR 中,然后你告诉 Django 使用STATICFILES_DIRS
。这告诉runserver
也去那里看看。在生产中,它告诉collectstatic
从哪里收集所有静态文件。
总结一下:STATIC_URL/path_to/my_file
是用户在使用内置 Django runserver 时在浏览器中看到的 URL,STATIC_URL
被剥离并 path_to/my_file
在所有应用程序静态目录和STATICFILES_DIRS
中列出的目录中进行搜索.
我还写了一个blog post关于这个。
关于python - 使用 STATICFILES_DIRS 而不是 STATIC_URL 时加载静态 css 和 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56008574/