我在我的settings.py中使用了
STATIC_ROOT = '/static/'
收集静态文件 这是我的static_path设置
STATIC_PATH = os.path.join(BASE_DIR,'static')
当我运行collect静态代码时django在我的工作区文件夹外面创建一个静态文件夹,它不应该收集我已经创建的静态文件夹中的所有静态文件吗?
答案 0 :(得分:2)
我认为您对STATIC_ROOT
以及STATIC_URL
和STATICFILES_DIRS
设置感到困惑。
告诉Django从example.com/static/
提供静态文件,设置
STATIC_URL = '/static/'
您不应该设置STATIC_ROOT = '/static'
。这告诉Django收集磁盘上/static/
的静态文件, 位于工作区之外。
STATIC_ROOT
是收集静态文件的目录。它应该像
STATIC_ROOT = '/var/www/example.com/staticfiles/'
如果您不想对目录进行硬编码,可以执行以下操作:
STATIC_ROOT = 'os.path.join(BASE_DIR, "staticfiles"),'
然后,您可以配置您的网络服务器(例如Nginx或Apache)来提供STATIC_ROOT
中的文件。
最后,STATICFILES_DIRS
是Django在您运行collectstatic
时搜索静态文件的位置列表。这些文件将从该目录复制到STATIC_ROOT
。因此,您需要确保STATIC_ROOT
中未包含STATICFILES_DIRS
。
答案 1 :(得分:0)
基本上,您可以为Django项目的不同应用程序创建多个“静态”文件夹,这些文件夹可用于开发。但是每当你去生产服务器并从同一个地方提供所有静态文件时,你就需要这个功能,你可以从不同目录中收集所有静态文件到工作场所之外的一个目录。
project_name
- project_name
- static
- static files goes here which are common
- __init__.py
- settings.py
- urls.py
- application_name
- static
- static files goes here which are related to application only
- __init__.py
- settings.py
- urls.py
- static - This is common place where all static files will be placed after collectstatic command for productions only.
根据上述结构,您可以理解您可以使用不同的服务器(如CDN)来服务静态文件。
如果您对答案不满意,请告诉我。感谢。