You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django静态jQuery加载404及Apache部署静态资源失效咨询

核心问题

你现在静态文件加载失败是两个配置错误导致的:

  • 路径配置错误:Django默认的BASE_DIR是manage.py所在的目录,对应你项目里的~/pack/mysite/。你原来STATICFILES_DIRS写的是os.path.join(BASE_DIR, 'mysite/static'),实际会去找~/pack/mysite/mysite/static,但你的jQuery实际放在~/pack/mysite/static/js/下,路径完全不匹配,开发环境当然报404。
  • 环境逻辑混淆:开发环境下Django会自带静态文件服务,但生产环境(Apache部署)下,DEBUG=False时Django默认不再处理静态请求,静态资源需要直接由Apache返回,你之前只修了开发环境的临时问题,没做静态收集、也没配Apache的静态路由,部署后必然加载失败。
开发/生产通用静态配置方案

按下面的配置改,一套代码可以同时适配两个环境,不用来回切换:

第一步:修正settings.py静态配置

把原来的静态相关配置替换成下面的内容,注意不要把源文件目录和收集输出目录配成同一个:

STATIC_URL = '/static/'

# 你自己存放全局静态源文件的目录,开发环境Django会直接从这里读文件
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]

# 执行collectstatic命令后,所有静态文件会统一汇总到这个目录,专门给生产环境用
# 注意不要和上面的STATICFILES_DIRS路径重复,不然收集静态时会报错
STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')

第二步:补全开发环境路由

修改根路由文件~/pack/mysite/mysite/urls.py,加开发环境专属的静态路由,这部分配置在生产环境DEBUG=False时会自动失效,不会有副作用:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'', include('mssql_app.urls')),
]

# 仅开发环境生效,自动代理静态文件请求
if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATICFILES_DIRS[0])

改完这两步,重启开发服务器,jQuery就能正常加载,不会再报404。

Apache生产环境部署正确步骤

生产环境不要让Django处理静态请求,性能差还容易出问题,按下面流程走:

  1. 把settings.py里的DEBUG设为False,同时配置好ALLOWED_HOSTS,加上你自己的域名或服务器IP。
  2. 进入manage.py所在的~/pack/mysite/目录,执行静态收集命令:
python manage.py collectstatic

执行后,所有app自带的静态文件(比如admin后台的样式、js)、还有你自己放在STATICFILES_DIRS里的静态资源(包括jQuery),都会自动复制到之前配置的collected_static目录下。
3. 修改Apache的虚拟主机配置,新增静态文件别名规则,让/static/开头的请求直接由Apache处理,不要转发给Django的WSGI进程:

# 你原来的WSGI配置保留,比如:
WSGIScriptAlias / /home/your_user/pack/mysite/mysite/wsgi.py
WSGIPythonPath /home/your_user/pack/mysite

# 新增下面这行,把静态路径映射到收集好的静态文件目录
Alias /static/ /home/your_user/pack/mysite/collected_static/

# 给静态目录配置访问权限
<Directory /home/your_user/pack/mysite/collected_static/>
    Require all granted
</Directory>

# 原有的WSGI目录权限配置保持不变
<Directory /home/your_user/pack/mysite/mysite/>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>

注意把路径里的your_user换成你服务器实际的用户名。
4. 重启Apache服务,静态资源就可以正常加载了,不管是你自己放的jQuery还是admin后台的样式都不会出问题。

注意事项

  • 每次更新了静态源文件,部署到生产时都要重新执行一次python manage.py collectstatic,把最新的文件同步到STATIC_ROOT目录。
  • 不要图省事在生产环境开Django的静态服务,Apache/Nginx处理静态文件的性能是Django的几十上百倍,生产环境一定要让web服务器直接处理静态请求。
  • 模板里引入静态文件的写法不用改,{% static 'js/jquery-3.1.1.min.js' %}在两个环境下都能正常解析。

内容的提问来源于stack exchange,提问作者xralf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 02:09:43