Django 1.11本地静态文件服务配置咨询
Django 1.11 本地静态文件服务配置指南
嘿,我帮你搞定这个静态文件的配置问题——你当前的核心问题是把开发环境和生产环境的静态配置搞混了,STATIC_ROOT是部署时才用的,开发环境得换个玩法~
第一步:修正 settings.py 里的静态配置
你现在的STATIC_ROOT指向了自己手动创建的static目录,这会导致开发服务器读取静态文件时冲突。修改如下:
# 保留原有的BASE_DIR和STATIC_URL BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_URL = '/static/' # 注释或删除原有的STATIC_ROOT(开发环境暂时不需要) # STATIC_ROOT = os.path.join(BASE_DIR, 'static') # 新增STATICFILES_DIRS,告诉Django你的静态文件存在哪里 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
划重点:
STATICFILES_DIRS是Django开发环境用来查找自定义静态文件的列表,而STATIC_ROOT是生产环境下collectstatic命令收集所有静态文件的目标目录,两者不要混用!
第二步:确认 urls.py 的静态路由配置
既然你已经引入了相关模块,补全最后的路由配置即可:
from django.conf import settings from django.conf.urls.static import static # 其他必要的导入(比如include、admin等) urlpatterns = [ # 你的现有路由,比如: # url(r'^admin/', admin.site.urls), # ... 其他自定义路由 ] # 开发环境下添加静态文件的服务路由 if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
这里加
if settings.DEBUG:是为了确保只有在开发模式(DEBUG=True)下才启用这个静态路由,生产环境会用服务器(比如Nginx)来处理静态文件,更高效。
第三步:验证配置是否生效
- 重启本地开发服务器:
python manage.py runserver - 在你的模板文件里正确引用静态文件(记得先加载static标签):
{% load static %} <link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}"> - 打开浏览器访问你的页面,查看控制台有没有404错误,如果
style.css能正常加载,说明配置成功啦!
额外提醒(部署时用)
以后要部署到生产环境时,记得:
- 恢复
STATIC_ROOT配置,比如指向一个专门的收集目录:STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') - 运行
python manage.py collectstatic,Django会把所有app和自定义目录里的静态文件都收集到STATIC_ROOT里,然后用Nginx等Web服务器来服务这个目录下的文件。
内容的提问来源于stack exchange,提问作者Sam B.
相关产品推荐
相关产品推荐

