WTForms दस्तावेज़ दुर्भाग्य से अपर्याप्त है, वे आपको एक कस्टम विजेट का एक भी उदाहरण भी नहीं दिखाते हैं जो पहले से ही किसी अन्य विजेट से नहीं लिया गया है।WTForms एक कस्टम विजेट बनाते हैं
सबमिट = InlineButton (name = 'प्रस्तुत', type = 'प्रस्तुत', शीर्षक = 'इस पेज को बचाओ:
मैं एक बटन प्रकार बनाने के लिए कोशिश कर रहा हूँ, कि "इनपुट" html में नहीं है ', textWithinSpan =' सहेजें ')
from flask.ext.wtf import Required, Length, EqualTo, Field, TextInput, html_params
from flask import Markup
class InlineButtonWidget(object):
text = ''
html_params = staticmethod(html_params)
def __init__(self, input_type='submit', **kwargs):
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 Markup('<button type="submit" %s><span>%s</span></button>' % (self.html_params(name=field.name, **kwargs), kwargs['textWithinSpan']))
class InlineButton(Field):
widget = InlineButtonWidget()
def __init__(self, label='', **kwargs):
self.widget = InlineButtonWidget('submit', label)
def __call__(self, **kwargs):
return self.widget(self, **kwargs)
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(name='submit', type='submit', title='Save this page', textWithinSpan='Save')
मैं भी एक फील्ड ली गई वस्तु की जरूरत नहीं होनी चाहिए। लेकिन यह तब प्रदर्शित नहीं होता है जब आप केवल विजेट का उपयोग करते हैं।
और जब आप फील्ड ऑब्जेक्ट का उपयोग करते हैं, तो यह आपको सभी प्रकार की अमान्य पैरामीटर त्रुटियों देता है।
डब्ल्यूटीएफएफएस स्रोत कोड में भी डूबने से यह समझना मुश्किल हो जाता है कि यह फॉर्म से विजेट तक क्वार्ग क्यों नहीं पारित करेगा।
--- अद्यतन ---
ठीक है, के बाद मैं सवाल मैं मूल रूप से समस्या का समाधान पता लगा सबमिट करें:
class InlineButtonWidget(object):
html_params = staticmethod(html_params)
def __init__(self, input_type='submit', text=''):
self.input_type = input_type
self.text = text
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 Markup('<button type="submit" %s><span>%s</span></button>' % (self.html_params(name=field.name, **kwargs), field.text))
class InlineButton(Field):
widget = InlineButtonWidget()
def __init__(self, label=None, validators=None, text='Save', **kwargs):
super(InlineButton, self).__init__(label, validators, **kwargs)
self.text = text
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('submit', text='Save', description='Save this')