django url配置失效(解决Django生产环境无法加载静态文件问题的解决)
django url配置失效
解决Django生产环境无法加载静态文件问题的解决起步
线上部署时因设置了 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 |
默认情况下 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 方式去处理静态文件,我们希望我们的程序是精益求精的良品。
总结
另外还有通过第三方程序来处理静态文件,比如 nginx 设置 alias 等。但显然我更希望是程序自身的处理方式。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:http://www.hongweipeng.com/index.php/archives/1745/
- django admin 开发实例(Django给admin添加Action的步骤详解)
- django后台运行命令(Django框架实现的普通登录案例使用POST方法)
- django变量怎么使用(django的settings中设置中文支持的实现)
- django路由原理(详解django中url路由配置及渲染方式)
- pycharm怎么创建django项目(Python、 Pycharm、Django安装详细教程图文)
- django怎么创建模板文件(django模板加载静态文件的方法步骤)
- django请求流程(Django学习笔记之为Model添加Action)
- django对话框(基于django channel实现websocket的聊天室的方法示例)
- django中的limit用法(如何在Django中添加没有微秒的 DateTimeField 属性详解)
- django用户上传文件怎么接收(Django框架文件上传与自定义图片上传路径、上传文件名操作分析)
- django框架详解(Django如何开发简单的查询接口详解)
- django 后台管理office文件(django admin后台添加导出excel功能示例代码)
- django 获取请求参数(深入理解Django-Signals信号量)
- python 后台django(Python Django给admin添加Action的方法实例详解)
- django怎么设置数据库(django配置连接数据库及原生sql语句的使用方法)
- django框架基础之路由详解(Django中如何防范CSRF跨站点请求伪造攻击的实现)
- 营养餐是什么(学校营养餐是什么)
- 谁说女子不如男 范冰冰演的武则天只是其一,另外两位你认识吗(谁说女子不如男)
- 杯酒人生---瓦伦丁酒杯和奥丁格啤酒(杯酒人生---瓦伦丁酒杯和奥丁格啤酒)
- 中秋节买啤酒,预算超过7元试试这8种啤酒,麦香浓郁都是真啤酒(预算超过7元试试这8种啤酒)
- CellPress旗下的6 期刊,国人友刊来了解一下吧(CellPress旗下的6期刊国人友刊来了解一下吧)
- ()
热门推荐
- sql表更新关联语句(SQL update 多表关联更新的实现代码)
- 阿里云ecs和轻量服务器(阿里云ECS服务器入门使用流程推荐)
- mysql索引的弊端(MySQL 全文索引的原理与缺陷)
- html如何定义添加的图片的宽和高(为何img、input等内联元素可以设置宽高)
- dedecms文章权重排序(修改dedecms文章标题长度限制的方法)
- 安装vmware总是没有虚拟网卡(关于VMware安装完后没有虚拟网卡的问题)
- Oracle TO_CHAR的使用
- vue 排班安排(vue实现钉钉的考勤日历)
- CSS中 z-index 的用法
- phpstudymysql启动又自动停止(Win下解决phpStudy MySQL启动失败)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9