【问题标题】:Comparison operator error with flask jinja2 template烧瓶 jinja2 模板的比较运算符错误
【发布时间】:2016-02-26 18:24:30
【问题描述】:

我正在跟进Displaying jinja2 form fields based on attribute value。我正在使用烧瓶和 jinja2 模板

我的表单类看起来像:

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')%}

对于电子邮件字段为 True

【问题讨论】:

  • 也许需要像 u'Email' 中的 unicode 字符串?我只是抓住那里的稻草......

标签: python flask jinja2


【解决方案1】:

您的代码中的问题是 field.label 返回 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'

【讨论】:

  • 谢谢,这对我有帮助。我可以看到你正在使用 pdb。我有一个不支持 jinja2 的旧版本的 pycharm,因此调试模板很困难。我不得不求助于打印声明,你能提供任何建议或好的文章来阅读你如何设置它吗?
  • 我只是使用 pdb++ 或 ipdb 和控制台来调试我的代码,而不是 PyCharm。在您的情况下,我没有调试模板 - 我刚刚在我的视图函数中设置了调试器,其中包含电子邮件表单并检查了字段标签是什么:)
猜你喜欢
  • 2022-01-07
  • 2019-08-10
  • 1970-01-01
  • 2017-11-20
  • 2018-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多