0

私は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": ""})

これを行う良い方法はありますか?

4

3 に答える 3

2

テンプレート システムに移行することが有益であるという点に到達しました。Django および Jinja2 テンプレートをサポートする Google AppEngine を使用しているようです。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))
于 2012-05-01T18:11:43.587 に答える
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": ""})
于 2012-05-01T17:59:27.370 に答える
1

次の構文を使用します。

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

長く感じる場合は、関数にすることができます。

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

その後:

"un_err": bool_it(valid_username, "This is not a valid username")
于 2012-05-01T18:02:18.617 に答える