【问题标题】:Pass to and use a variable inside a FlaskForm (WTForms)传递并使用 FlaskForm (WTForms) 中的变量
【发布时间】:2017-12-03 18:42:52
【问题描述】:

代码非常不言自明 - 我想将变量传递给 FlaskForm 子类以供进一步使用。

from flask import Flask, render_template_string
from flask_wtf import FlaskForm
from wtforms import StringField
from flask_wtf.csrf import CSRFProtect


app = Flask(__name__)
spam = 'bar'
app.secret_key = 'secret'
csrf = CSRFProtect(app)

@app.route('/')
def index():
    eggs = spam
    form = FooForm(eggs)
    return render_template_string(
    '''
    {{ form.bar_field.label }} {{ form.bar_field }}
    ''',form = form)

class FooForm(FlaskForm):
    def __init__(self, bar):
        super(FooForm, self).__init__()
        self.bar = bar
    bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar))

if __name__ == '__main__':
    app.run(debug=True)

我得到的是

line 22, in FooForm
    bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar))
NameError: name 'self' is not defined

我如何达到期望?

【问题讨论】:

    标签: python variables flask wtforms


    【解决方案1】:

    我遇到了与此非常相似的问题,我花了一段时间才弄清楚。你想做的事情可以这样完成:

    from wtforms.fields.core import Label
    
    class FooForm(FlaskForm):
        bar_field = StringField("Label does not matter")
    
    
    @app.route('/')
    def index():
        eggs = 'bar'
        form = FooForm()
        form.bar_field.label = Label("bar_field", "Label's last word is 'bar': {0}".format(eggs))
    
        return render_template_string(
        '''
        {{ form.bar_field.label }} {{ form.bar_field }}
        ''',form = form)
    

    在此处查看我提出的问题和我的回答:flaskform pass a variable (WTForms)

    【讨论】:

      【解决方案2】:

      将您的 bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar)) 放入 init() 方法中。 使用这个:

      class FooForm(FlaskForm):
      def __init__(self, bar):
          super(FooForm, self).__init__()
          self.bar = bar
          self.bar_field = StringField("Label's last word is 'bar': {0}".format(self.bar))
      

      【讨论】:

      • 这不是我想要达到的。我不想要 FlaskForm 的 bar_field,我想要我的 FooForm 的 bar_field。
      • 您自己尝试过您的建议吗?它给了jinja2.exceptions.UndefinedError: '__main__.FooForm object' has no attribute 'bar_field'
      • 你自己尝试一下你的建议吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      相关资源
      最近更新 更多