Flask jinja2 模板的比较运算符错误
Comparison operator error with flask jinja2 template
我正在跟进 。我正在使用 Flask 和 jinja2 模板
我的表单 class 看起来像:
class RegisterForm(Form):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=40)])
我有一个 jinja2 表单模板,如下所示:
{% from "macros.html" import render_field %}
<div class="container-narrow">
<h1>Register</h1>
<br/>
<form id="registerForm" class="form form-register" method="POST" action="" role="form">
{{ form.hidden_tag() }}
{% for field in form %}
{% print(field.label != 'Email')%}
{% print(field.label)%}
{% print(field.name)%}
{% if field.label!='Email' or email=='False' %}
{{ render_field(field) }}
{% endif %}
{% endfor %}
<p><input class="btn btn-default btn-submit" type="submit" value="Register"></p>
</form>
{% endblock %}
和一个看起来像这样的 jinja2 宏:
{% macro render_field(field)%}
<div class="form-group">
{# {{field.label}}#}
{{field(placeholder=field.label.text, class_="form-control")}}
</div>
{% endmacro %}
您可以在屏幕截图中看到输出。我不明白为什么:
{% print(field.label != 'Email')%}
电子邮件字段为真
您的代码中的问题是 field.label
returns Label
不是字符串。因此,您的比较总是会产生 True
(这是正确的)。
我的代码中有类似的电子邮件表单,这是一个示例:
(Pdb++) form.email.label
Label('email', u'Email')
(Pdb++) form.email.label != 'email'
True
(Pdb++) form.email.label != 'Email'
True
(Pdb++) type(form.email.label)
<class 'wtforms.fields.core.Label'>
(Pdb++) form.email.label.text
u'Email'
(Pdb++) form.email.label.field_id
'email'
我正在跟进
我的表单 class 看起来像:
class RegisterForm(Form):
username = StringField('Username', validators=[DataRequired(), Length(min=3, max=25)])
email = StringField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=40)])
我有一个 jinja2 表单模板,如下所示:
{% from "macros.html" import render_field %}
<div class="container-narrow">
<h1>Register</h1>
<br/>
<form id="registerForm" class="form form-register" method="POST" action="" role="form">
{{ form.hidden_tag() }}
{% for field in form %}
{% print(field.label != 'Email')%}
{% print(field.label)%}
{% print(field.name)%}
{% if field.label!='Email' or email=='False' %}
{{ render_field(field) }}
{% endif %}
{% endfor %}
<p><input class="btn btn-default btn-submit" type="submit" value="Register"></p>
</form>
{% endblock %}
和一个看起来像这样的 jinja2 宏:
{% macro render_field(field)%}
<div class="form-group">
{# {{field.label}}#}
{{field(placeholder=field.label.text, class_="form-control")}}
</div>
{% endmacro %}
您可以在屏幕截图中看到输出。我不明白为什么:
{% print(field.label != 'Email')%}
电子邮件字段为真
您的代码中的问题是 field.label
returns Label
不是字符串。因此,您的比较总是会产生 True
(这是正确的)。
我的代码中有类似的电子邮件表单,这是一个示例:
(Pdb++) form.email.label
Label('email', u'Email')
(Pdb++) form.email.label != 'email'
True
(Pdb++) form.email.label != 'Email'
True
(Pdb++) type(form.email.label)
<class 'wtforms.fields.core.Label'>
(Pdb++) form.email.label.text
u'Email'
(Pdb++) form.email.label.field_id
'email'