文字列の書式指定を使ってHTMLに変数を埋め込む

python_logo

HTMLの中に変数を入れ込むというCGIで良くやるやつです。
ソースはpython3.3を想定して書いてます。

結論から言えば、str.format() を使うだけです。

例えばPHPとかだと

$hello = 'こんにちは!';
print "<p>$hello</p>";
<p>こんにちは!</p>

となる。

これをPythonでやってみる。

hello = 'こんにちは!'
print('<p>' + hello + '</p>')
<p>こんにちは!</p>

んで、そのうちコメント(ヒアドキュメント)とprintf的な書き方を使ったりし始めてー

title = '挨拶は元気よく'
hello = 'こんにちは!'
print('''
<div>
    <h1>%s</h1>
    <p>%s</p>
</div>
''' % title, hello)
<div>
    <h1>挨拶は元気よく</h1>
    <p>こんにちは!</p>
</div>

とまぁここまでなら特に問題ないと思うけど、この書き方だと

1.変数を表示したい順番に並べなければいけない(% title, hello の部分)
2.埋め込まれた箇所を見てどの変数が入っているかわからない(どこを見ても%sだらけに)
 →何番目の変数か数えなきゃいけない!(>’A`)>

やりたいことは
・変数名でそのまま埋め込んで展開したい
・変数名をキーにした辞書(ディクショナリ)で管理したい

ということで解決策は「str.format() メソッドを使う」こと(・ω・)b
一目瞭然ソースを見てみる

greeting = {
    'goodmorning' : 'おはよう!',
    'hello' : 'こんにちは!',
    'goodevening' : 'こんばんは!'    
}
print('''
<p>
    {goodmorning}<br />
    {hello}<br />
    {goodevening}
</p>
'''.format(**greeting))
<p>
    おはよう!<br />
    こんにちは!<br />
    こんばんは!
</p>

辞書を別ファイルにしてインポートする形にすると
色々管理しやすくて良いですね(*´-`)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Post Navigation