Python:使用布尔值确定字符串格式?

时间:2012-05-01 17:43:21

标签: python string formatting boolean

我是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": ""})

有一个很好的方法吗?

3 个答案:

答案 0 :(得分:2)

你已经达到了移动到模板系统将会有益的程度。看起来您正在使用Google AppEngine,它支持Django和Jinja2模板。您可以在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))

答案 1 :(得分: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": ""})

答案 2 :(得分: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")