2012-05-01 15 views
0

私はPythonを初めて使いました。ブール値で決定された部分を挿入して文字列をフォーマットするのが最善の方法です。Python:文字列のフォーマットをブール値で判定しますか?

エラーメッセージが表示される長いhtmlフォーム文字列があります。私は正しく検証できませんでした形の部分のためのエラーメッセージを表示する:

form = """Signup 
    <form method="post"> 
     <table> 
     <tr> 
      <td class="label"> 
      Username 
      </td> 
      <td> 
      <input type="text" name="username" value="%(un)s"> 
      </td> 
      <td class="error"> 
       %(un_err)s 
      </td> 
     </tr> 
     ............ 

    </form>""" 

私はこれを持っているポストコール処理をしていた場合:

self.response.out.write(form % {"un": username, "pw": password, "pwv": validate, "email": email, "un_err": "", "pw_err": "", "verify_err": "", "email_err": ""}) 

は、各」..._ ERR 「メッセージは別々のブールによって決定され、例えば、valid_usernameがfalseの場合、出力は次のようになります。

self.response.out.write(form % {"un": username, "pw": password, "pwv": validate, "email": email, "un_err": "This is not a valid username", "pw_err": "", "verify_err": "", "email_err": ""}) 

これを行うには良い方法はありますか?その後、

def bool_it(var, s): 
    return "" if var else s 

をして:それは長い間あなたが関数にそれを作ることができるために感じている場合は

"un_err": "" if valid_username else "This is not a valid username", ... 

答えて

1
un_err_map = { 
    True: "", 
    False: "This is not a valid username" 
} 

... 

self.response.out.write(form % {"un": username, "pw": password, "pwv": validate, "email": email, "un_err": un_err_map[valid_username], "pw_err": "", "verify_err": "", "email_err": ""}) 
1

は、この構文を使用し

"un_err": bool_it(valid_username, "This is not a valid username") 
2

あなたは」テンプレート作成システムに移行する時点に達しましたmは有益であろう。 DjangoとJinja2テンプレートをサポートしているGoogle AppEngineを使用しているようです。あなたはdocumentationにAppEngineの特定の統合に関する詳細を見つけることができます。

Jinja2テンプレートをお勧めします。これにより、目標を達成しやすくなります。

<form method="post"> 
    <table> 
    <tr> 
     <td class="label"> 
     Username 
     </td> 
     <td> 
     <input type="text" name="username" value="%(un)s"> 
     </td> 
     <td class="error"> 
     {% if un_err %} 
      {{ un_err }} 
     {% endif %} 
     </td> 
    </tr> 
    ... 
    </table> 
</form> 

そして、あなたは、レンダリングのためのページを処理しているときあなたに似た何かをすることができるだろう:

template = jinja_environment.get_template('signup_form.html') 
self.response.out.write(template.render(template_values)) 
あなたのテンプレートのようなものを含めることができます
関連する問題