Django+Apache2部署静态文件出现URLconf匹配错误求助
解决Django 1.11静态文件加载失败的问题
你的问题核心出在静态文件配置的两个关键错误上:settings里的参数名写错了,同时urls.py没有处理静态文件的请求路由。下面一步步帮你修复:
1. 修正settings.py中的静态文件配置
你当前写的STATICFILES_DIR是单数,而Django要求的参数名是复数形式STATICFILES_DIRS,并且它的值需要是一个列表(哪怕只有一个目录)。另外,建议用项目根目录的相对路径配置,避免硬编码绝对路径更灵活:
# 先导入os模块(如果没导入的话) import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) STATIC_URL = '/static/' # 配置静态文件目录,指向项目根目录下的static文件夹 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), # 如果还有其他静态目录,可以继续添加到列表里 ] # STATIC_ROOT仅在生产环境部署时需要,开发环境可以暂时注释 # STATIC_ROOT = '/var/www/html/aerocredRoot/static_collected'
如果你的静态文件确实放在/var/www/html/aerocredRoot/static,也可以直接把绝对路径写进列表,但用BASE_DIR拼接更适合项目迁移。
2. 给urls.py添加静态文件路由
Django的开发服务器默认不会自动处理/static/开头的请求,你需要手动在urls.py中添加路由规则,让服务器知道去哪里找这些静态文件:
from django.conf import settings from django.conf.urls.static import static from django.contrib import admin from django.conf.urls import url, include from . import views urlpatterns = [ url(r'^$', views.index), # 你原来写的^%应该是笔误,改成^$匹配首页 url(r'^admin/', include(admin.site.urls)), ] # 开发环境下添加静态文件路由,仅当DEBUG=True时生效 if settings.DEBUG: urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) # 如果你更想直接指向STATICFILES_DIRS里的目录,也可以这么写: # urlpatterns += static(settings.STATIC_URL, document_root=os.path.join(settings.BASE_DIR, 'static'))
3. 验证修复效果
- 重启Django开发服务器(修改settings和urls后必须重启才会生效)
- 刷新浏览器,检查网络请求里的静态文件是否能正常加载
额外注意点
- 确保
settings.DEBUG设置为True(开发环境下保持这个状态即可),如果DEBUG=False,开发服务器不会处理静态文件,这时候才需要用collectstatic把文件收集到STATIC_ROOT,再用Nginx/Apache等服务器托管静态文件。 - 你之前尝试的
collectstatic是生产环境部署用的,开发环境下完全不需要执行这个命令。
内容的提问来源于stack exchange,提问作者Pyroadrian
相关产品推荐
相关产品推荐

