Python Flask WTF使用输入=提交,而不是按钮类型=提交

Python Flask WTF使用输入=提交,而不是按钮类型=提交,python,flask,wtforms,flask-wtforms,Python,Flask,Wtforms,Flask Wtforms,我想使用Flask的“SubmitField” 我猜我必须以某种方式修改SubmitInput(SubmitField后面的小部件),但我不确定如何确切地做到这一点,我是否必须以某种方式修改uu html_uuu() 编辑: from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput from flask import Markup class InlineButtonWidget(object): html

我想使用Flask的“SubmitField”

我猜我必须以某种方式修改SubmitInput(SubmitField后面的小部件),但我不确定如何确切地做到这一点,我是否必须以某种方式修改uu html_uuu()

编辑:

from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput
from flask import Markup
class InlineButtonWidget(object):
    html = """
    <button type="submit" title="%s"><span>%s</span></button>
    """

    def __init__(self, input_type='submit'):
        self.input_type = input_type

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        if 'value' not in kwargs:
            kwargs['value'] = field._value()
        return HTMLString(self.html % (field.name, field.label ))


class InlineButton(Field):
  widget = InlineButtonWidget()
  def _value(self):
    if self.data:
        return u', '.join(self.data)
    else:
        return u''


class SignupForm(Form):
    name = TextField('Name', [Length(min=1, max=200)])
    submit = InlineButton('sign up')
需要从flask.ext.wtf导入,长度,相等,字段,文本输入
从flask导入标记
类InlineButtonWidget(对象):
html=”“”
%
"""
def uu init uu(self,input_type='submit'):
self.input\u type=输入类型
定义调用(自身、字段、**kwargs):
kwargs.setdefault('id',field.id)
kwargs.setdefault('type',self.input_type)
如果“值”不以kwargs表示:
kwargs['value']=字段。_value()
返回HTMLString(self.html%(field.name,field.label))
类InlineButton(字段):
widget=InlineButtonWidget()
def_值(自身):
如果是自助数据:
返回u','.join(self.data)
其他:
返回u“
班级报名表(表格):
name=TextField('name',[Length(最小值=1,最大值=200)])
提交=InlineButton('注册')
我希望能够做到这一点:

from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput
from flask import Markup
class InlineButtonWidget(object):
    html = """
    <button type="submit" title="%s"><span>%s</span></button>
    """

    def __init__(self, input_type='submit'):
        self.input_type = input_type

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        if 'value' not in kwargs:
            kwargs['value'] = field._value()
        return HTMLString(self.html % (field.name, field.label ))


class InlineButton(Field):
  widget = InlineButtonWidget()
  def _value(self):
    if self.data:
        return u', '.join(self.data)
    else:
        return u''


class SignupForm(Form):
    name = TextField('Name', [Length(min=1, max=200)])
    submit = InlineButton('sign up')

submit=InlineButton({'name':'submit','title':'立即注册参加奖品','type':'submitfieldtype','textinespan':'保存当前工作'})很容易,你可以创建像InlineButtonWidget()这样的新小部件,但我认为最好从表单中删除submit并在模板中使用它

<button type="submit" title="Save this form"><span>Save</span></button>
保存
当然,你也可以这样做:

{% for name, label in buttons %}
    <button type="submit" title="{{name}}"><span>{{name}}</span></button>
{% endfor %}
{%用于名称,标签位于按钮%}
{{name}}
{%endfor%}
示例小部件:

class InlineButtonWidget(object):
    html = """
    <button type="submit" title="%s"><span>%s</span></button>
    """

    def __init__(self, input_type='submit'):
        self.input_type = input_type

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        if 'value' not in kwargs:
            kwargs['value'] = field._value()
        return HTMLString(self.html % (field.name, field.lable ))
类InlineButtonWidget(对象):
html=”“”
%
"""
def uu init uu(self,input_type='submit'):
self.input\u type=输入类型
定义调用(自身、字段、**kwargs):
kwargs.setdefault('id',field.id)
kwargs.setdefault('type',self.input_type)
如果“值”不以kwargs表示:
kwargs['value']=字段。_value()
返回HTMLString(self.html%(field.name,field.lable))

以下实现更通用

from wtforms.widgets.core import html_params
from wtforms.widgets import HTMLString

class InlineButtonWidget(object):
    """
    Render a basic ``<button>`` field.
    """
    input_type = 'submit'
    html_params = staticmethod(html_params)

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        kwargs.setdefault('value', field.label.text)
        return HTMLString('<button %s>' % self.html_params(name=field.name, **kwargs))


class InlineSubmitField(BooleanField):
    """
    Represents an ``<button type="submit">``.  This allows checking if a given
    submit button has been pressed.
    """
    widget = InlineButtonWidget()


class SignupForm(Form):
    name = TextField('Name', [Length(min=1, max=200)])
    submit = InlineSubmitField('sign up')
从wtforms.widgets.core导入html_参数
从wtforms.widgets导入HTMLString
类InlineButtonWidget(对象):
"""
呈现一个基本的```字段。
"""
输入类型='submit'
html_参数=静态方法(html_参数)
定义调用(自身、字段、**kwargs):
kwargs.setdefault('id',field.id)
kwargs.setdefault('type',self.input_type)
kwargs.setdefault('value',field.label.text)
返回HTMLString(“”%self.html_参数(name=field.name,**kwargs))
类InlineSubmitField(布尔字段):
"""
表示一个“``”。这允许检查给定的
提交按钮已按下。
"""
widget=InlineButtonWidget()
班级报名表(表格):
name=TextField('name',[Length(最小值=1,最大值=200)])
submit=InlineSubmitField('注册')

我希望有更好的flask wtf文档。我似乎不能正确使用这个小部件。我试图构建一个字段派生类,将您的类用作小部件,但它没有出现在页面上,即使一切正常。我将构建很多表单,我不想每次都使用不同的模板,只是一个通用表单。HTMLJINJA2模板中预先存在的“字段”功能不起作用,它只是将我的小部件作为转义html打印,而不是打印实际的html。我在jinja2中找不到任何关于“field”函数的文档,为什么?@Dexter user{{safe}}过滤器在jinja2中。对于文档,我建议您使用表单文档。不是烧瓶wtfYes我正在使用wtforms文档,而且不清楚我是否需要“安全”。{safe}}在打印html时使用,在打印wtforms字段(如TextField或SubmitField等)时使用field(),它们似乎根本不需要“safe”。我在网上找到了一个示例,您的call()函数返回self.html,但它们返回的是HTMLString(self.html)。可能是这个吗?见:
class InlineButtonWidget(object):
    html = """
    <button type="submit" title="%s"><span>%s</span></button>
    """

    def __init__(self, input_type='submit'):
        self.input_type = input_type

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        if 'value' not in kwargs:
            kwargs['value'] = field._value()
        return HTMLString(self.html % (field.name, field.lable ))
from wtforms.widgets.core import html_params
from wtforms.widgets import HTMLString

class InlineButtonWidget(object):
    """
    Render a basic ``<button>`` field.
    """
    input_type = 'submit'
    html_params = staticmethod(html_params)

    def __call__(self, field, **kwargs):
        kwargs.setdefault('id', field.id)
        kwargs.setdefault('type', self.input_type)
        kwargs.setdefault('value', field.label.text)
        return HTMLString('<button %s>' % self.html_params(name=field.name, **kwargs))


class InlineSubmitField(BooleanField):
    """
    Represents an ``<button type="submit">``.  This allows checking if a given
    submit button has been pressed.
    """
    widget = InlineButtonWidget()


class SignupForm(Form):
    name = TextField('Name', [Length(min=1, max=200)])
    submit = InlineSubmitField('sign up')