我是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": ""})
有一个很好的方法吗?
答案 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")