2010-09-03 128 views
3

我在我的Pylons網站中使用了Mako模板系統,並且在剝離空白時遇到了一些問題。如何使用Mako模板去除空白和換行符?我的12362行HTML文件正在查殺IE

我的剝離空白的理由是生成的HTML文件出現爲12363行代碼。我假設,這是爲什麼Internet Explorer在嘗試加載時掛起的原因。

我希望能夠讓我的HTML文件看起來不錯而且整潔,因此我可以輕鬆對其進行更改,並使生成的輸出看起來像要求減少文件大小和內存使用量一樣醜陋和混亂。

Mako文檔http://www.makotemplates.org/docs/filtering.html說你可以使用trim標誌,但這似乎並不奏效。示例代碼:

<div id="content"> 
    ${next.body() | trim} 
</div> 

我已經能夠以剝離換行的唯一方式是增加一個\(反斜槓)於每行的末端。對代碼進行編碼時這很煩人,我寧願有一個集中的解決方案。

如何刪除空格/換行符?

+0

你說:「我希望能有我的HTML文件看上去漂亮又整齊,所以我可以輕鬆改變它,必須根據需要削減文件大小生成的輸出看起來醜陋和雜亂和內存使用情況。「 - 你的意思是你想要整齊地格式化Mako文件,還是將整齊傳送給網站訪問者的HTML格式化? – 2010-09-20 23:48:48

回答

0

我在猜測修剪過濾器將您的html視爲一個單獨的字符串,並且只剝去前導和尾隨空格字符。你希望它從每一行刪除空白。我會創建一個過濾器並遍歷每一行。

<%! 
    def better_trim(html): 
     clean_html = '' 
     for line in html: 
      clean_html += line.strip() 
     return clean_html 
%> 

<div id="content"> 
    ${next.body() | better_trim} 
</div> 
0

我不認爲IE掛起是由於文件大小。你可能剛剛發現了一個標記的組合,它會導致一個導致它凍結的IE錯誤。嘗試修剪文檔,直到凍結不再發生以隔離有問題的標記模式(然後避免標記模式),或者嘗試更改標記直到不再發生爲止。

另一件好事就是通過HTML驗證器運行你的頁面並修復報告的任何問題。

0

您可以創建自己的簡單WSGI中間件,以便在模板呈現後(可能使用this answer中描述的方法)從模板中去除空白。

下面是一個可以幫助您入門的快速示例。 注意:我寫這段代碼時沒有測試甚至運行它;它可能第一次工作,但它可能不適合你的需要,所以你需要自己擴展。

class HTMLMinifyMiddleware(object): 
    def __init__(self, app): 
     self.app = app 

    def __call__(self, environ, start_response): 
     resp_body = self.app(environ, start_response) 

     for i, part in enumerate(resp_body): 
      resp_body[i] = ' '.join(part.split()) 

     return resp_body 
+0

另請注意,如果您要返回某種迭代器/生成器來節省內存,則會消耗整個響應。 – Splee 2010-12-10 18:35:39

相關問題