国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

Tornado Web服務器中處理空白字符的解決方案

2019-11-02 15:52:11
字體:
來源:轉載
供稿:網友

Tornado模板引擎一直有一個坑,有時候你可能覺得并不影響正常使用,但強迫癥就是受不了:模板會去掉每行前后的空格。

最后出來的頁面就是這樣:

不縮進真的很影響心情的好吧,特別是對一個python開發者。

國外一些Q&A對這個情況也有一些討論,其中提到比較多的就是compress_whitespace。在github找到一個issue:https://github.com/tornadoweb/tornado/issues/178,就是在抱怨空白字符的問題??瞻鬃址?lt;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核心代碼,將這幾句注釋掉:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 屯昌县| 余江县| 武夷山市| 全南县| 平乡县| 百色市| 渭南市| 洪泽县| 祥云县| 德钦县| 锦州市| 池州市| 靖边县| 吴江市| 平罗县| 元谋县| 察哈| 湘潭县| 鹤庆县| 丽江市| 建湖县| 珠海市| 霞浦县| 宜川县| 兴隆县| 和田市| 通道| 纳雍县| 余庆县| 新河县| 天全县| 台山市| 隆林| 达拉特旗| 淮南市| 内黄县| 洪江市| 新平| 张家港市| 大冶市| 宁阳县|