Python 烧瓶属性错误:';HTMLString';对象没有属性'__调用';
我创建了一个宏来处理表单错误,如下所示:Python 烧瓶属性错误:';HTMLString';对象没有属性'__调用';,python,flask,flask-wtforms,Python,Flask,Flask Wtforms,我创建了一个宏来处理表单错误,如下所示: {% macro render_field_with_errors(field) %} <p> {{ field.label }} {{ field(**kwargs)|safe }} {% if field.errors %} <ul> {% for error in field.errors %}
{% macro render_field_with_errors(field) %}
<p>
{{ field.label }} {{ field(**kwargs)|safe }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li style="color: red;">{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
{% endmacro %}
{% macro render_field(field) %}
<p>{{ field(**kwargs)|safe }}</p>
{% endmacro %}
from flask.ext.wtf import Form, TextField, BooleanField, PasswordField, RadioField, SelectMultipleField
from flask.ext.wtf import Required
class LoginForm(Form):
username = TextField('email', validators = [Required()])
password = PasswordField('password', validators=[Required()])
remember_me = BooleanField('remember_me', default = False)
<!-- Login form -->
{% from "includes/_formhelpers.html" import render_field_with_errors %}
<form method="POST" action="/login" focus="first">
<div class="span5">
{{ login_form.hidden_tag() }}
{{ render_field_with_errors(login_form.username(placeholder="Username / Email", class="span10")) }}
<br>
{{ render_field_with_errors(login_form.password(placeholder="Password", class="span10")) }}
<br>
<div class="qp-log">
{{ render_field_with_errors(login_form.remember_me(class="qp-login", value="remember_me")) }} Remember Me
<br>
<button type="submit" class="btn qp-btn" style="height:30px;width:56px;">Login</button>
<button type="Reset" class="btn">Clear</button>
</div>
<div class="qp-pass">
Forgot Password? <a href ="#">click here</a>
</div>
</div>
<div class="span2">
<br>
<br>
<br>
<img src="{{ url_for('static', filename='img/or_icon.gif') }}">
</div>
<div class="span5">
<center>
<br>
<button class="btn btn-facebook">
<small>Connect with</small>
<big> Facebook </big>
</button>
<h4> or </h4>
<button type="Submit" class="btn qp-btn">
<a href="signup.html" style="color:white;">Sign Up for Free</a>
</button>
</center>
</div>
</form>
<!-- Form End -->
我的登入表格如下:
{% macro render_field_with_errors(field) %}
<p>
{{ field.label }} {{ field(**kwargs)|safe }}
{% if field.errors %}
<ul>
{% for error in field.errors %}
<li style="color: red;">{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</p>
{% endmacro %}
{% macro render_field(field) %}
<p>{{ field(**kwargs)|safe }}</p>
{% endmacro %}
from flask.ext.wtf import Form, TextField, BooleanField, PasswordField, RadioField, SelectMultipleField
from flask.ext.wtf import Required
class LoginForm(Form):
username = TextField('email', validators = [Required()])
password = PasswordField('password', validators=[Required()])
remember_me = BooleanField('remember_me', default = False)
<!-- Login form -->
{% from "includes/_formhelpers.html" import render_field_with_errors %}
<form method="POST" action="/login" focus="first">
<div class="span5">
{{ login_form.hidden_tag() }}
{{ render_field_with_errors(login_form.username(placeholder="Username / Email", class="span10")) }}
<br>
{{ render_field_with_errors(login_form.password(placeholder="Password", class="span10")) }}
<br>
<div class="qp-log">
{{ render_field_with_errors(login_form.remember_me(class="qp-login", value="remember_me")) }} Remember Me
<br>
<button type="submit" class="btn qp-btn" style="height:30px;width:56px;">Login</button>
<button type="Reset" class="btn">Clear</button>
</div>
<div class="qp-pass">
Forgot Password? <a href ="#">click here</a>
</div>
</div>
<div class="span2">
<br>
<br>
<br>
<img src="{{ url_for('static', filename='img/or_icon.gif') }}">
</div>
<div class="span5">
<center>
<br>
<button class="btn btn-facebook">
<small>Connect with</small>
<big> Facebook </big>
</button>
<h4> or </h4>
<button type="Submit" class="btn qp-btn">
<a href="signup.html" style="color:white;">Sign Up for Free</a>
</button>
</center>
</div>
</form>
<!-- Form End -->
我没有发现代码中有什么错误?如果我从html中删除宏
文件,而不是包含用于html格式错误处理的for循环,它工作得非常完美。什么
我认为是,元素中包含的占位符和类导致
错误,但不确定原因
我最近遇到了类似的问题,我相信问题在于login.html中的这种模式
{{ render_field_with_errors(login_form.password(placeholder="Password", class="span10")) }}
您正在将占位符和类传递给登录表单,此时该表单只是wtf生成的一段html。如果我在我的flask版本中尝试这个,我会得到完全相同的错误,即使其余的代码是不同的。如果我在助手中传递占位符和类,则错误消失:
{{ field(class="span10",placeholder="Password",**kwargs)|safe }}
如果无法在助手中传递通用占位符和类,则始终可以在模板中指定它们
<div class=span10> {{render_field_with_errors(loginForm.password) }} </div>
这很有意义-您正在将关键字参数传递给字段。您没有向它传递一个带有参数的函数,它无法处理该函数,而只是传递了几个关键字参数。希望这有帮助。“{render\u field\u带有错误(login\u form.password,placeholder=“password”,class=“span10”)}”为我工作,谢谢。