【问题标题】:Flask-WTF and field nameFlask-WTF 和字段名
【发布时间】:2013-10-25 08:26:37
【问题描述】:

我想更改SubmitFieldname 属性(默认为“提交”)。我尝试了什么:

from flask.ext.wtf import Form, SubmitField

class BaseForm(Form):
    submit = SubmitField('Create', id='submit_button', name='submit_button')  #1
    submit = SubmitField('Create', id='submit_button', _name='submit_button')  #2

    def __init__(self, edit=None, *args, **kwargs):
        self.submit.kwargs['name'] = 'submit_button'   #5
        self.submit.kwargs['_name'] = 'submit_button'   #6

它们都因不同的错误而失败。如果我删除 name_name 参数一切正常。我发现name 属性是由flask.ext.wtf.Form 传递的,但我不知道如何修复它。

注意:我正在使用我的表单的重要导入:它是在运行时导入的,在视图的方法内部,而不是在文件的顶部。由于技术问题,我不能也不会更改它。 IE。如果我在 IDLE 中复制粘贴我的代码,它工作正常。但是如果我在 MethodView 的port 方法中导入这段代码,它就会失败。

【问题讨论】:

    标签: flask flask-wtforms


    【解决方案1】:

    更改名称最简单的方法是更改​​字段的名称:

    class BaseForm(Form):
        # This one's name will be submit_button
        submit_button = SubmitField('Create')
        # This one's name will be another_button
        another_button = SubmitField('Do Stuff')
    

    【讨论】:

    • 您的样本更改了控制的label,而不是其名称。如果<input>标签,名称是属性,标签是用户看到的。
    • @AlexG.P. - 你看过生成的输出了吗? HTML 中输入的名称应根据 Form 子类中的属性名称进行更改 - 这就是您可以执行以下操作的方式:class SomeForm(Form): firstname = TextField("My Name") 而不是 class SomeForm(Form): firstname= TextField("My Name", name_="firstname")
    【解决方案2】:

    您是否考虑过使用自定义构造函数扩展 SubmitField 本身。查看示例here

    基本上你会做这样的事情:

    class CustomSubmitField(SubmitField):
        def __init__(self, label='', validators=None,_name='',**kwargs):
            super(SubmitField, self).__init__(label, validators, **kwargs)
            custom_name = "whatever"
            self._name = custom_name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-22
      • 2015-04-07
      相关资源
      最近更新 更多