用于 Jinja 的 Dynamic Flask-Form 结构
Dynamic Flask-Form construction intended for use under Jinja
我的目的是构建一个带有动态提供的标签的表单,并在 Jinja 表单中使用它。这让我揭示了多个基本问题。
就像这里的例子
from flask_wtf import FlaskForm
from wtforms import SubmitField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
# submit = SubmitField('Go On')
def __init__(self, BtnLble):
self.submit = SubmitField(BtnLble,form=self, name="MySbmt", _meta=self.Meta)
# self.submit.bind(form=self, name="MySbmt", _meta=self.Meta)
super(LoginForm,self).__init__()
self.submit() # .__call__() does not exist
def UseForm( ) :
Login = LoginForm(“Hit here”)
if form.validate_on_submit():
flash('Wellcom... ' )
return redirect(url_for(‘GoOn’))
return render_template('Login.html', **locals())
我尝试在表格 class 的 __init __ 部分“动态”构建我的表格。似乎元素的构造(在示例中放在注释中)与声明部分所做的不同
在上面的例子中,调用“submit()”的结果是“Non callable object”。虽然只有在声明部分声明它才有可能!
所以我想到了以下问题:
1) 声明部分的声明和在__init __'.我们没有使用“静态”变量她!
2) 如何使“表单字段”可调用?
3) 好像只有在FlaskForm的initiator调用之后,callability才会存在。它如何向该对象添加“方法”?
我注意到其他有经验的开发人员已经提出了类似的问题,但他们并没有像这样简单地提供这些问题
WTForms keeps giving "Not Callable" error during server run, but not on the python prompt
wtforms.Form
class 中的字段由 wtforms.forms.FormMeta
元class 设置。当表单实例的 __init__
方法被调用时,为时已晚,无法向表单添加新字段。
您可以动态修改表单 class,如 documentation 中所述。请注意,这将影响 class.
的所有未来实例
setattr(LoginForm, 'submit', wtforms.SubmitField('Hit here'))
form = LoginForm()
如果您只想自定义特定实例中某个字段的标签,您可以在该实例的 __init__
方法中执行此操作。
class LoginForm(wtforms.Form):
submit = wtforms.SubmitField()
def __init__(self, label, **kwargs):
super().__init__()
self.submit.label = wtforms.Label(self.submit.id, label)
我的目的是构建一个带有动态提供的标签的表单,并在 Jinja 表单中使用它。这让我揭示了多个基本问题。 就像这里的例子
from flask_wtf import FlaskForm
from wtforms import SubmitField
from wtforms.validators import DataRequired
class LoginForm(FlaskForm):
# submit = SubmitField('Go On')
def __init__(self, BtnLble):
self.submit = SubmitField(BtnLble,form=self, name="MySbmt", _meta=self.Meta)
# self.submit.bind(form=self, name="MySbmt", _meta=self.Meta)
super(LoginForm,self).__init__()
self.submit() # .__call__() does not exist
def UseForm( ) :
Login = LoginForm(“Hit here”)
if form.validate_on_submit():
flash('Wellcom... ' )
return redirect(url_for(‘GoOn’))
return render_template('Login.html', **locals())
我尝试在表格 class 的 __init __ 部分“动态”构建我的表格。似乎元素的构造(在示例中放在注释中)与声明部分所做的不同
在上面的例子中,调用“submit()”的结果是“Non callable object”。虽然只有在声明部分声明它才有可能! 所以我想到了以下问题:
1) 声明部分的声明和在__init __'.我们没有使用“静态”变量她!
2) 如何使“表单字段”可调用?
3) 好像只有在FlaskForm的initiator调用之后,callability才会存在。它如何向该对象添加“方法”?
我注意到其他有经验的开发人员已经提出了类似的问题,但他们并没有像这样简单地提供这些问题
WTForms keeps giving "Not Callable" error during server run, but not on the python prompt
wtforms.Form
class 中的字段由 wtforms.forms.FormMeta
元class 设置。当表单实例的 __init__
方法被调用时,为时已晚,无法向表单添加新字段。
您可以动态修改表单 class,如 documentation 中所述。请注意,这将影响 class.
的所有未来实例setattr(LoginForm, 'submit', wtforms.SubmitField('Hit here'))
form = LoginForm()
如果您只想自定义特定实例中某个字段的标签,您可以在该实例的 __init__
方法中执行此操作。
class LoginForm(wtforms.Form):
submit = wtforms.SubmitField()
def __init__(self, label, **kwargs):
super().__init__()
self.submit.label = wtforms.Label(self.submit.id, label)