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

 更新时间:2015年01月21日 09:05:01   投稿:junjie  
这篇文章主要介绍了Tornado Web服务器中处理空白字符的解决方案,本文通过修改Tornado源码解决这个问题,需要的朋友可以参考下

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

相关文章

  • ISAPI-REWRITE伪静态规则写法以及说明

    ISAPI-REWRITE伪静态规则写法以及说明

    ISAPI-REWRITE伪静态规则写法以及说明,很多朋友对rewrite的规则不太熟悉,这里介绍下,方便需要的朋友
    2012-06-06
  • RSync实现文件备份同步详解

    RSync实现文件备份同步详解

    rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息
    2016-03-03
  • 阿里云主机不能用IP访问网站的解决方法(配置安全组规则搞定)

    阿里云主机不能用IP访问网站的解决方法(配置安全组规则搞定)

    刚买了一台阿里云主机,迫不待及的试试速度,怎知网站访问不了,用IP或绑定域名都无法访问,后来提交工单才知道,需要配置安全组规则才行。针对同样像我一样的新手,本文就介绍一下如何在开通阿里云主机后配置安全组规则,让网站能够外网访问,需要的朋友可以参考下
    2020-07-07
  • 文件服务器 File Browser安装配置详解

    文件服务器 File Browser安装配置详解

    这篇文章主要为大家介绍了文件服务器 File Browser安装配置详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Windows下实现简单的libevent服务器

    Windows下实现简单的libevent服务器

    这篇文章主要介绍了Windows下实现简单的libevent服务器的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • DELL服务器 Dell PowerEdge服务器RAID卡驱动大全

    DELL服务器 Dell PowerEdge服务器RAID卡驱动大全

    这篇文章主要介绍了DELL服务器 Dell PowerEdge服务器RAID卡驱动,因为官方的很多系统都不带阵列卡驱动,需要安装驱动才可以,一般情况下2003用集成raid驱动的系统才可以安装或者按F6加载驱动
    2016-04-04
  • GPU服务器的多用户配置方法

    GPU服务器的多用户配置方法

    这篇文章主要介绍了GPU服务器的多用户配置,主要包括安装ssh,安装 ftp,创建用户组和用户及安装配置 Anaconda的相关知识,需要的朋友可以参考下
    2022-07-07
  • 如何通过Apache Bench实现web压力测试

    如何通过Apache Bench实现web压力测试

    这篇文章主要介绍了如何通过Apache Bench实现web压力测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • linux使用dd命令查看服务器磁盘IO性能

    linux使用dd命令查看服务器磁盘IO性能

    dd命令是Linux系统中的一个非常强大的工具,它可以用于复制文件、转换文件格式、备份数据等,这篇文章主要介绍了linux查看服务器磁盘IO性能,需要的朋友可以参考下
    2024-02-02
  • CentOS系统通过日志反查是否被入侵

    CentOS系统通过日志反查是否被入侵

    最近有个朋友的服务器发现有入侵的痕迹后来处理解决但是由于对方把日志都清理了无疑给排查工作增加了许多难度。其实日志的作用是非常大的。学会使用通过日志来排查解决我们工作中遇到的一些问题是很有必要的。下面就一一道来。
    2016-08-08

最新评论