内容简介:线上部署时因设置了如果运行是通过但如果是通过
起步
线上部署时因设置了 settings.DEBUG = False
会导致静态文件都是 404 的情况。主要原因是应为关闭DEBUG模式后,Django 便不提供静态文件服务了。
runserver 的启动
如果运行是通过 runserver
命令的方式,那简单,在启动 runserver 指令后追加 --insecure
选项能参数强制 django 处理静态文件。
其他方式启动
但如果是通过 uwsgi
或 daphne
等启动的话,追加选项的方式就不管用了。要解决这个问题,我们要手动去使用静态文件服务,这种处理方式是比较推荐的,因为它同时也支持了 runserver
的方式。
解决的方式如下,在 urls.py
中添加 url 规则:
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/(?P<path>.*)$', return_static, name='static'), # 添加这行
]
这样就行了。
为什么这样就能解决了?
需要去做静态文件的路由匹配,但重点是这里多了个函数 return_static
去代理了 serve
,如果你稍微看下 serve
函数的代码就立马理解了:
def serve(request, path, insecure=False, **kwargs):
if not settings.DEBUG and not insecure:
raise Http404
# code...
默认情况下 insecure=False
,并且在关闭调试模式后都是 404。通过写个 return_static
函数其实与 --insecure
的选项是异曲同工的。
媒体文件的处理
媒体文件的处理当然可以将上面 url 规则变动下就能加载了。如果用上面的方法来处理媒体文件可以得 90 分,那么下面的方法可以得 95 分。
上面的方法会搜索多个目录的,尽管开发人员会将静态文件同一放目录下。但 Django 的 admin
模块的静态文件存放在其他地方的。
而媒体文件,我们只会限定在一个目录的,所以更好的处理方法是只在一个目录下搜索:
from 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
方式去处理静态文件,我们希望我们的程序是精益求精的良品。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- webpack中如何加载静态文件
- [OpenGL]未来视觉6-静态图片纹理加载
- thinkphp5 加载静态资源路径与常量
- 借助 Webpack 静态分析能力实现代码动态加载
- 静态库遇到静态库
- 全局变量,静态全局变量,局部变量,静态局部变量
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机是怎样跑起来的
[日] 矢泽久雄 / 胡屹 / 人民邮电出版社 / 2015-5 / 39.00元
本书倡导在计算机迅速发展、技术不断革新的今天,回归到计算机的基础知识上。通过探究计算机的本质,提升工程师对计算机的兴趣,在面对复杂的最新技术时,能够迅速掌握其要点并灵活运用。 本书以图配文,以计算机的三大原则为开端、相继介绍了计算机的结构、手工汇编、程序流程、算法、数据结构、面向对象编程、数据库、TCP/IP 网络、数据加密、XML、计算机系统开发以及SE 的相关知识。 图文并茂,通俗......一起来看看 《计算机是怎样跑起来的》 这本书的介绍吧!