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>"""

当我处理 post call 时,我有这个:

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

您已经达到了迁移到模板系统将是有益的地步。看起来您正在使用 Google AppEngine,它支持 Django 和 Jinja2 模板。您可以在其文档中找到有关 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 回答