7

Mako + Pylonsを使用していますが、HTML出力に途方もない量の空白があることに気づきました。

どうすればそれを取り除くことができますか?Redditはなんとかそれを行うことができます。

4

5 に答える 5

8

バックスラッシュがあります。

例については、makohttp://makotemplates.orgのホームページをご覧ください。

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

しかし、真剣に、私は出力を正しくフォーマットしようとすることに多くの時間を費やすことはありませんでした。重要なのは、読み取り可能なテンプレートコードを用意することです。私は「ソースの表示」よりもWebkit(または必要に応じてFireBug)のWebインスペクターを頻繁に使用します。

本当に適切なフォーマットのHTML出力が必要な場合は、それを実行するミドルウェアをいつでも作成できます。

于 2010-10-06T01:14:13.860 に答える
4

後処理なしでこれを行う唯一の方法は、テンプレート内の空白を避けることです。ただし、それは開発者としてのあなたにとって非常に困難になります。

テンプレートがレンダリングされた後に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>'
于 2010-10-06T04:25:41.717 に答える
2

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スリムなどを介して渡すことができます)。これは最も効率的な方法ではありませんが、簡単な例になります:)

于 2010-10-06T01:13:20.747 に答える
0

データがあまり動的でない場合は、テンプレート出力の最適化されたキャッシュを保存して、これをWebクライアントに提供できます。

于 2010-10-06T00:27:27.620 に答える
0

ダンの答えと同様に、レンダリングされた出力を、「意図的な」空白のみを保持するこの関数に渡しました。私は、2つのcarrageが連続して戻る(つまり、空の行)と定義しました

それで

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 )

そのように実行します(私はダンの例の一部を盗みました)

whitespace_mess = template.render(somevar="Hello \nThere")
cleaned_up_output = filter_newline(whitespace_mess)
于 2016-05-19T22:55:48.037 に答える