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

admin3年前服务器42

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核心代码,将这几句注释掉:


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

相关文章

国内免备案服务器好处是什么,国内免备案服务器的应用范围

在中国的互联网发展中,备案是一项必要的手续,对于要在中国境内提供服务的网站而言,备案是必不可少的一个环节。但是,备案并不是一件容易的事情,部分网站可能会一连多次备案不通过,因此,很多人开始寻找免备案的...

高防服务器租用好处是什么,高防服务器租用说明

1.什么是高防服务器租用?高防服务器租用指的是用户可以租用一种具有强大DDoS防护能力的服务器,该服务器拥有千兆带宽和防护高峰攻击的能力,可以有效防止攻击带来的影响。2.高防服务器租用的特点高防服务器...

Web服务器Tomcat的这些架构模块,您都知道吧?

俗话说,站在巨人的肩膀上看世界,一般学习的时候也是先总览一下整体,然后逐个部分个个击破,最后形成思路,了解具体细节,Tomcat的结构很复杂,但是 Tomcat 非常的模块化,找到了 Tomcat最核...

icp备案查询系统怎么用,icp备案查询系统简介

1.什么是icp备案?ICP备案是工信部行业监管部门实施的互联网信息服务资源管理制度,全称为互联网内容提供单位信息备案管理办法。其目的是为了监管互联网信息服务资源,促进互联网健康有序发展。2.icp备...

虚拟主机99idc是什么,虚拟主机99idc的优势

1.什么是虚拟主机99idc?虚拟主机99idc是一种网络托管服务,其基于共享服务器的一种虚拟化技术,通过将单独的物理服务器分为多个虚拟服务器,每台虚拟服务器提供独立的主机空间和服务,多个用户可以通过...

如何选择租用网站服务器?

随着互联网的发展,现在很多企业都向互联网上发展了,开始在网络上建立了,属于自己企业的官网,那么在网上建立网站就意味着需要租用服务器,现在还是有很多企业不懂得如何租用网站服务器,那么小编就给大家讲解一下...