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核心代码,将这几句注释掉:
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 战锤40K星际战士2狙击职业介绍|狙击职业技能效果一览
- RobertSaxtonTheResurrectionoftheSoldiers(2024)[24Bit-192kHz]FLAC
- 唐成杨东哥弹唱《情若真HQ》头版限量编号[WAV+CUE]
- 柏菲·HIFI风情1《一杯香茶》限量开盘母带ORMCD[WAV+CUE]
- 发糖了!《黑神话》动画导演绘制八戒紫蛛儿中秋贺图
- “时光系列”新作《时光3:永耀之境》首曝:画风更真实的恋爱模拟RPG
- 《战地》游戏主管:始终认为《战地》未来销量能超越《使命召唤》
- 《伤感民谣 值得收藏的音乐极品 2CD》[WAV/分轨][1.2GB]
- 《邓紫棋 巨肺唱将小天后有心人 2CD》[WAV/分轨][1.2GB]
- 《迪克牛仔 坛奇精选 2CD台首版》 [WAV+CUE][600MB]
- 陈明.1998-为了爱影视歌曲+新歌【中唱】【WAV+CUE】
- 黄小琥.2009-简单/不简单【华纳】【WAV+CUE】
- 洪卓立.2010-TASTE.OF.LOVE新曲+精丫英皇娱乐】【WAV+CUE】
- 战锤40K星际战士2职业强度排行
- 交错战线PVE国家队成员以及常用角色推荐