Tornado Web服务器中处理空白字符的解决方案

admin3年前服务器43

Tornado模板引擎一直有一个坑,有时候你可能觉得并不影响正常使用,但强迫症就是受不了:模板会去掉每行前后的空格。

最后出来的页面就是这样:

不缩进真的很影响心情的好吧,特别是对一个python开发者。

国外一些Q&A对这个情况也有一些讨论,其中提到比较多的就是compress_whitespace。在github找到一个issue:github/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("") or \
            name.endswith(".js")

 

其中有个compress_whitespace参数,当name(模板地址)是以或.js结尾的时候,将compress_whitespace为真。

实际上最后在generate函数里,处理空格的代码:

 

复制代码 代码如下:

if writerpress_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.模板文件不为或.js后缀,可以为.htm或.tpl等。
4.修改核心库代码。

第2种方法肯定是最烂的,不可能为了缩进问题去改模板。第3种方法只能算一个权衡之计,去避免麻烦而不是解决麻烦,不是我的风格,而且后缀改了往往影响编辑器里的代码高亮和代码补全。第1种方法应该是最好的,但实际上,我们在controller里调用模板是使用render()或render_string()来做的,而这两个函数是封装了Template对象的创建过程,我们根本接触不到Template的构造函数,所以也没法控制compress_whitespace的值。

所以希望官方能进行修改,让代码能pythonic。

我这里用第4种方法,直接去修改Tornado核心代码,将这几句注释掉:


免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

Win下解决phpStudy MySQL启动失败

报错Apache\Nginx服务正常启动了,但是MySQL却一直启动失败。解决流程查看端口是否被占用打开系统自带的资源管理器,查看监听端口3306是不是被占用,下图中3306端口被mysqld.exe...

100m空间多少钱,了解100m空间的价格

1.什么是100m空间?100m空间是指虚拟主机提供商提供的一种服务器资源分配方案,用户可以在这个空间内存储自己的网站、应用程序、数据库等。2.100m空间的价格因素100m空间的价格主要受以下几个因...

Apache为mysql以及自己的项目设置虚拟路径

1.Apache2.2\conf\httpd.conf中释放:Include conf/extra/httpd-vhosts.conf(去掉前面的#)2.httpd.conf中增加<Direct...

论坛主机适合哪些人使用,论坛主机的性能和优点

论坛主机是指专门为论坛网站提供服务的托管服务器。随着网络的普及和发展,越来越多的论坛网站出现,并且不断扩大,需要更加高效和稳定的主机来支持。论坛主机的选择对于网站来说是非常重要的,一个稳定的主机可以保...

windows下实现定时重启Apache与MySQL方法

采用at命令添加计划任务。有关使用语法可以到window-》“开始”-》运行“cmd”-》执行命令“at /”,这样界面中就会显示at命令的语法。下面我们讲解下如何让服务器定时启动apache与mys...

网站空间服务器的正确选择方法

互联网的发展对传统行业、实体店带来了强大的冲击,为了适应时代的发展,不少企业或个人不得不选择搭建网站来维持现有的或新的业务来源。网站建设的好坏直接关乎着企业的成败,所以我们不能在任何一个环节上出现问题...