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

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

扫码添加渲大师小管家,免费领取渲染插件、素材、模型、教程合集大礼包!

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

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

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

不缩进真的很影响心情的好吧。特别是对一个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核心代码。将这几句注释掉:

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

分享到 :
相关推荐

美国高防cdn服务器适合搭建哪些业务(美国高防cdn服务器适合搭建哪些业务)

美国高防cdn服务器适合搭建的业务有:1。大型电商业务。流量规模较大。很适合使用美国...

国外云服务器租用要注意哪些事项(国外云服务器租用要注意哪些事项呢)

国外云服务器租用要注意的事项有:1。注意云服务器的价格。选择性价比高的云服务器。避免...

香港新世界机房服务器好吗(香港新世界机房官网)

香港新世界机房是香港超大型互联网数据中心之一。也是目前香港到大陆速度最快。最稳定线路...

如何辨别高防服务器的好坏(如何辨别高防服务器的好坏视频)

网络攻击现在变得越来越多发。如果是使用云服务器的企业。就需要留意了。想要提高服务器的...

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注