首頁>Program>source

我正在使用Mako + Pylons,並且我在HTML輸出中註意到了很多空白。

我將如何删除它? Reddit設法做到了。

最新回復
  • 4天前
    1 #

    我不確定Mako本身是否有办法做到這一點,但是您始终可以在提供頁面之前进行一些後期渲染處理.例如,假設您具有以下代碼来生成可怕的空白:

    from mako import TemplateLookup
    template_lookup = TemplateLookup(directories=['.'])
    template = template_lookup.get_template("index.mako")
    whitespace_mess = template.render(somevar="no whitespace here")
    return whitespace_mess # Why stop here?
    

    您可以像這樣添加一个額外的步骤:

    from mako import TemplateLookup
    template_lookup = TemplateLookup(directories=['.'])
    template = template_lookup.get_template("index.mako")
    whitespace_mess = template.render(somevar="no whitespace here")
    cleaned_up_output = cleanup_whitespace(whitespace_mess)
    return cleaned_up_output
    

    ...其中cleanup_whitespace()是執行您想要的功能的函式(可以通過HTML Tidy,slimer或其他方法傳遞它).這不是最有效的方法,但是可以举一个簡單的例子:)

  • 4天前
    2 #

    有反斜杠。

    以mako的主頁http://makotemplates.org為例。

    <%def name="makerow(row)">
        <tr>
        % for name in row:
            <td>${name}</td>\
        % endfor
        </tr>
    </%def>
    

    但是认真的說,我不会花很多時間尝試正確格式化輸出.重要的是要具有可讀的模板代碼.我比"查看源代碼"更频繁地使用webkit(或FireBug,如果您愿意的话)的web檢查器。

    如果確實希望获得格式良好的html輸出,則始终可以編寫實現此目的的中間件。

  • 4天前
    3 #

    無需进行後處理的唯一方法就是避免模板中的空白.但是,對於開發人員来說,這会让您非常困难。

    您需要確定在呈現模板後清理HTML字元串的時間是否会节省足够的頻寬以抵消此费用.我建議使用優化的C代碼庫為您做到這一點,例如 lxml.html

    >>> from lxml import html
    >>> page = html.fromstring("""<html>
    ... 
    ... <body>yuck, a newline! bandwidth wasted!</body>
    ... </html>""")
    >>> html.tostring(page)
    '<html><body>yuck, a newline! bandwidth wasted!</body></html>'
    

  • 4天前
    4 #

    如果資料不是太動態,則可以儲存模板輸出的優化快取並將其提供给web客戶端。

  • 4天前
    5 #

    類似於Dan的迴答,我通過了渲染 通過此函式的輸出仅保留"故意的"空白.我將其定義為连續两个角叉車返迴(即空行)

    所以

    Hello 
    There
    

    成為

    Hello There
    

    但是

    Hello
    There
    

    成為

    Hello
    There
    

    這是代碼

    def filter_newline(input):
        rendered_output = []
        for line in input.split("\n"):
            if line:
                # Single new-lines are removed
                rendered_output.append(line)
            else:
                # Subsequent newlines (so no body to the interveaning line) are retained
                rendered_output.append("\n")
        return "".join( rendered_output )
    

    這樣執行(我偷了Dan的示例的一部分)

    whitespace_mess = template.render(somevar="Hello \nThere")
    cleaned_up_output = filter_newline(whitespace_mess)
    

  • javascript:輸入欄位中的預設文字
  • ruby on rails:多次部署後的Heroku子弹大小