gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 27 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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服务器中处理空白字符的解决方案

最后此篇关于Tornado Web服务器中处理空白字符的解决方案的文章就讲到这里了,如果你想了解更多关于Tornado Web服务器中处理空白字符的解决方案的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com