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搭建web服务器和ftp教程(Windows实例通过IIS如何搭建多个FTP站点?)
- web服务器最低配置(分享几种常见WEB服务器配置方案)
- tomcat服务页面打开超慢(Web服务器Tomcat高级优化)
- nginx 怎么搭建web服务器(Linux+Nginx+Php架设高性能WEB服务器)
- centos各种服务器搭建(CentOS下Lighttpd Web服务器安装与配置方法)
- web压力测试工具app(十款Web服务器性能压力测试工具)
- apache怎么配置服务器(Apache2 WEB服务器的配置步骤分享)
- 什么是web服务器(什么是网站服务器?服务器是做什么用的?)
- 最轻量web服务器(免费开源的几款Web服务器软件简介)
- 列举服务器网络防御措施(如何对Web服务器进行飓风级防御)
- 有哪些优秀的web服务器(几款比较好的WEB服务器软件推荐)
- 搭建web服务器的步骤(windows下三种web服务器搭建方式)
- web服务器和http服务器的区别(浅谈WEB服务器、应用程序服务器、HTTP服务器区别)
- web服务器的配置教程(Web服务器硬件配置改如何选择?)
- web服务器主要有哪些(浅谈Web服务器和应用服务器的区别)
- web服务器和应用服务器区别(web服务器跟app服务器存在什么不同?)
- 1天密接者猛增77人,患者轨迹透露危险信号 吉林市全面封闭管理(1天密接者猛增77人)
- 吉林舒兰 封城 15人确诊 276人隔离,出现跨省传播(吉林舒兰封城)
- 四月新番CP人气榜公布,《剃须》两度上榜,沙优不是女朋友(四月新番CP人气榜公布)
- 2019年外媒秋季新番动画角色CP排行榜,桐人和爱丽丝落榜(2019年外媒秋季新番动画角色CP排行榜)
- 新一小兰领衔 盘点动漫中的那些 远距离恋爱情侣(盘点动漫中的那些)
- 大事件 合肥四中火了(大事件合肥四中火了)
热门推荐
- dockertomcat运行参数设置(Docker Tomcat为何看不到访问界面)
- python自动处理图片(python制作图片缩略图)
- 服务器高性能ssd是什么(为什么更推荐SSD技术的云服务器?)
- 如何用python编写抽奖(详解用python写一个抽奖程序)
- pythondict排序原理(Python标准库使用OrderedDict类的实例讲解)
- linux虚拟主机怎么设置(linux系统虚拟主机开启支持Swoole Loader扩展的方法)
- linux系统查看nginx系统版本(Linux中Nginx的防盗链和优化的实现代码)
- python中如何清空列表数据(Python批量删除只保留最近几天table的代码实例)
- python在mysql创建数据库(python3对接mysql数据库实例详解)
- django详情页面获取用户id(Django项目中添加ldap登陆认证功能的实现)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9