时间:2021-05-02
Tornado模板引擎一直有一个坑,有时候你可能觉得并不影响正常使用,但强迫症就是受不了:模板会去掉每行前后的空格。
最后出来的页面就是这样:
不缩进真的很影响心情的好吧,特别是对一个python开发者。
国外一些Q&A对这个情况也有一些讨论,其中提到比较多的就是compress_whitespace。在github找到一个issue:https://github.com/tornadoweb/tornado/issues/178,就是在抱怨空白字符的问题。空白字符在<pre>中被去除,导致代码标签“<pre>”这块出问题。
我们看看tornado代码吧,这是Template类的构造函数:
复制代码 代码如下:其中有个compress_whitespace参数,当name(模板地址)是以.html或.js结尾的时候,将compress_whitespace为真。
实际上最后在generate函数里,处理空格的代码:
复制代码 代码如下:当compress_whitespace为真,且html里没有"<pre>"的时候进入这个if语句。"<pre>"这个我估计就是解决上面那个issue用的,但明显是一个非常不pythonic的方式。
经过一番分析,可以发现,有这样一些方法可以避免“缩进”被去除:
1.Template的构造函数中,传入compress_whitespace=False。
2.在模板中加入"<pre>"。
3.模板文件不为.html或.js后缀,可以为.htm或.tpl等。
4.修改核心库代码。
第2种方法肯定是最烂的,不可能为了缩进问题去改模板。第3种方法只能算一个权衡之计,去避免麻烦而不是解决麻烦,不是我的风格,而且后缀改了往往影响编辑器里的代码高亮和代码补全。第1种方法应该是最好的,但实际上,我们在controller里调用模板是使用render()或render_string()来做的,而这两个函数是封装了Template对象的创建过程,我们根本接触不到Template的构造函数,所以也没法控制compress_whitespace的值。
所以希望官方能进行修改,让代码能pythonic。
我这里用第4种方法,直接去修改Tornado核心代码,将这几句注释掉:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
一、Tornado简介Tornado是FriendFeed的Web服务器及其常用工具的开源版本。Tornado和现在的主流Web服务器框架(包括大多数Pytho
chinmo逆向思维解决方案复制代码代码如下:/***至少有一个非空白字符并且不超过6个字符的正则表达式**作者:chinmo*整理:http://www.Co
Tornado是一种Web服务器软件的开源版本。Tornado和主流Web服务器框架(包括大多数Python的框架)有着明显的区别:它是非阻塞式服务器,而且速度
解决方案对于FLV类型:打开InternetInformationServicesManager(iis(微软的WEB服务器平台)),选择“本地计算机”-->用
复制代码代码如下:vartrimInfo={basic:////vb中的简单空白字符过滤,classic:/\s///传统的js空白字符过滤,ecmascrip