2023-05-08 分类 技术 标签 django 阅读 170
线上部署时因设置了 settings.DEBUG = False 会导致静态文件都是 404 的情况。主要原因是应为关闭DEBUG模式后,Django 便不提供静态文件服务了。 runserver 的启动 如果运行是通过 runserver 命令的方式,那简单,在启动 runserver 指令后追加 --insecure 选项能参数强制 django 处理静态文件。 其他方式启动 但如果是通过 uwsgi 或 daphne 等启动的话,追加选项的方式就不管用了。要解决这个问题,我们要手动去使用静态文件服务,这种处理方式是比较推荐的,因为它同时也支持了 runserver 的方式。 解决的方式如下,在 urls.py 中添加 url 规则:
? 1 2 3 4 5 6 7 8 9 10 from django.contrib.staticfiles.views import serve from django.urls import re_path def return_static(request, path, insecure=True, kwargs): return serve(request, path, insecure, kwargs) urlpatterns = [ ... re_path(r'^static/(?Pfrom django.views.static import serve as static_serve # 注意这里引入的与上面的不同 from django.urls import re_path urlpatterns = [ ... re_path(r'^media/(?P<path>.*)$' , static_serve, { 'document_root' : settings.MEDIA_ROOT}), ]
另外,如果网站的所有静态文件都只会在一个目录下(使用 collectstatic 能将所有静态文件都复制到一个目录),那么也请用这个 static_serve 方式去处理静态文件,我们希望我们的程序是精益求精的良品。 总结 另外还有通过第三方程序来处理静态文件,比如 nginx 设置 alias 等。但显然我更希望是程序自身的处理方式