发布于 

Django踩坑小记

记录今天在对Cage的页面做一些小修改的时候遇到的问题:

Django collected_static

django拥有极为便捷的一键收集静态资源功能:即利用 python3 manage.py collectstatic指令来将项目中的静态文件收集到 STATIC_ROOT指定的目录中。每个应用都可以有自己的static/目录存放静态文件,还可以在 STATICFILES_DIRS中指定其他的静态文件路径,当执行 collectstatic时,会把所有 STATICFILES_DIRS目录内的文件都复制过来。如果再次执行 collectstatic,会提示是否需要覆盖已经存在的静态文件。

这样做可以统一静态文件的存放地址,以方便配置Web服务程序。

之前在部署博客时是有使用过这个指令的,但是在今天在本地开发时由于一般把 Debug选项设置为 True,通过Django来完成对静态资源的渲染,访问静态文件,因此直接对项目文件夹里的css文件作修改就能实时显示页面的变化,而在服务器上部署之后静态文件统一存放在collected_static文件夹中,由nginx来处理对静态文件的访问。

今天commit完css文件后发现服务器上的博客页面并没有按预期的发生变化,重启nginx和gunicorn也不管用,卡壳了半天最后才意识到是collected_static文件夹里的css文件没有更改。因此在开发过程中如果对静态资源进行过修改,要记得先执行 collectstatic再commit,或者是在服务器端拉取最新静态资源文件后,在服务器端执行 collectstatic。个人建议采用前者,保证本地分支始终是最新的版本,避免引起git冲突。

这个问题归根结底是对django特性的不熟悉,恰恰因为django足够强大足够方便,我们反而要更加留心它的一些人性化feature。其实今天还有一个操作数据库时碰到的坑,但那个实在是自己太蠢了qwq,略去不提。

##时区问题

开启时区设置后(USE_TZ = True), Django会将系统时间转化成UTC时间存储到数据库中(对时区设置为上海来说,django会将获取到的系统时间减8再存储到数据库中)。同时默认数据库中的时间为UTC时间,从数据库中获取时间字段后转换成时区时间再渲染。


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 @tsparrot 创建,使用 Stellar 作为主题。