tornado异步编程(Tornado Web服务器中处理空白字符的解决方案)
tornado异步编程
Tornado Web服务器中处理空白字符的解决方案Tornado模板引擎一直有一个坑,有时候你可能觉得并不影响正常使用,但强迫症就是受不了:模板会去掉每行前后的空格。
最后出来的页面就是这样:
不缩进真的很影响心情的好吧,特别是对一个python开发者。
国外一些Q&A对这个情况也有一些讨论,其中提到比较多的就是compress_whitespace。在github找到一个issue:https://github.com/tornadoweb/tornado/issues/178,就是在抱怨空白字符的问题。空白字符在<pre>中被去除,导致代码标签“<pre>”这块出问题。
我们看看tornado代码吧,这是Template类的构造函数:
def __init__(self, template_string, name="<string>", loader=None,
compress_whitespace=None, autoescape=_UNSET):
self.name = name
if compress_whitespace is None:
compress_whitespace = name.endswith(".html") or \
name.endswith(".js")
其中有个compress_whitespace参数,当name(模板地址)是以.html或.js结尾的时候,将compress_whitespace为真。
实际上最后在generate函数里,处理空格的代码:
if writer.compress_whitespace and "<pre>" not in value:
value = re.sub(r"([\t ]+)", " ", value)
value = re.sub(r"(\s*\n\s*)", "\n", value)
当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核心代码,将这几句注释掉:
- iis服务器如何搭建一个网站(配置IIS网站web服务器的安全策略配置解决方案)
- web压力测试工具app(十款Web服务器性能压力测试工具)
- goweb框架哪个用的最多(教你搭建一个简单的Go Web服务器)
- nginx服务器和apache服务器(Nginx vs Apache两大web服务器比较)
- 什么是web服务器(什么是网站服务器?服务器是做什么用的?)
- net微服务架构部署方式(基于Apache的支持.NET2.0的Web服务器搭建)
- 由于Web服务器上的“ISAPI 和CGI 限制”的解决方法
- nginx配置两个前端web服务(你真的了解如何将Nginx配置为Web服务器吗)
- ftp服务器包括哪些(FTP服务器和Web服务器知多少)
- web服务器iis安全访问机制(IIS与APACHE实现HTTP重定向到HTTPS)
- hbuilderx怎么创建web项目(HBuilder如何设置web服务器)
- iisweb服务器版本(配置IIS服务器 支持sis下载等)
- 数据库负载均衡的原理(理解web服务器和数据库的负载均衡以及反向代理)
- 常用web服务器与简介(最流行的5大开源web服务器)
- win7iis服务器的安装与配置(用IIS建立高安全性Web服务器的方法)
- server2008对前端有啥用(MyWebServer好不好?MyWebServer WEB服务器软件介绍)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 越难春卷(越难春卷皮怎么用)
- 休闲VS新古典 办公家居简约设计(办公家居简约设计)
- 15个新成 园 位置公布 深圳龙岗2022年共建花园建设又有大动作(15个新成园位置公布)
- 记者手记 书记带我去 巡街(记者手记书记带我去)
- 富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元 | 美通社(富士胶片集团将向土耳其东南部地震灾民捐赠5000万日元)
热门推荐
- mysql常用四种日志(MySQL 撤销日志与重做日志Undo Log与Redo Log相关总结)
- laravel事件返回错误数据(laravel Validator ajax返回错误信息的方法)
- 怎么编写计算小程序(微信小程序实现简易计算器)
- idea的mysql如何连接(在IntelliJ IDEA中使用Java连接MySQL数据库的方法详解)
- 微信小程序js 抽奖概率(小程序实现筛子抽奖)
- Oracle TO_CHAR的使用
- auto.js源码分享(最新热门脚本Autojs源码分享)
- amazeui 费用(AmazeUI的下载配置与Helloworld的实现)
- php中怎么判断变量类型(PHP INT类型在内存中占字节详解)
- docker和k8s怎么部署(在docker中部署k8s的方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9