如何解决 Flask 中使用 WTForm 时自定 Button 却在页面总被 Div 包裹住的问题,flaskwtform,wtform中,我想定制
如何解决 Flask 中使用 WTForm 时自定 Button 却在页面总被 Div 包裹住的问题,flaskwtform,wtform中,我想定制
wtform中,我想定制一个button。
参考官方文档编写了ButtonFiled()和ButtonWidget(object)以及ButtonInput(Input).
为什么我用了与库中一摸一样的代码,只是改了个函数名字,在页面生成的却总会被包裹在一个 DIV中?且会被加上一个Label。
效果如图:
我的代码如下:
# !/usr/bin/env python# coding: utf-8''''''from werkzeug.utils import escapefrom wtforms import BooleanField,Fieldfrom wtforms.widgets import HTMLString, html_params, Input, SubmitInputfrom wtforms.compat import text_type__author__ = 'Jux.Liu'class ButtonWidget(object): ''' 用于显示按钮(button)的部件(widget) ''' def __call__(self, field, **kwargs): kwargs.setdefault('name', field.name) kwargs.setdefault('value', field.value) kwargs.setdefault('type', "submit") return HTMLString('<button %s>%s</button>' % ( html_params(**kwargs), escape(field._value()) ))class ButtonInput(Input): """ Renders a submit button. The field's label is used as the text of the submit button instead of the data on the field. """ input_type = 'submit' def __call__(self, field, **kwargs): kwargs.setdefault('value', field.label.text) return super(ButtonInput, self).__call__(field, **kwargs)class ButtonOneField(BooleanField): ''' 定义可以将按钮(button)用于 Flask 表单(form)的域(field) ''' widget = SubmitInput()class ButtonTwoField(Field): ''' 定义可以将按钮(button)用于 Flask 表单(form)的域(field) ''' widget = ButtonWidget() def __init__(self, text, name, value, **kwargs): super(ButtonTwoField, self).__init__(**kwargs) self.text = text self.value = value self.name = name def _value(self): return str(self.text)
官方库代码截取如下:
class SubmitField(BooleanField): """ Represents an ``<input type="submit">``. This allows checking if a given submit button has been pressed. """ widget = widgets.SubmitInput()class BooleanField(Field): """ Represents an ``<input type="checkbox">``. :param false_values: If provided, a sequence of strings each of which is an exact match string of what is considered a "false" value. Defaults to the tuple ``('false', '')`` """ widget = widgets.CheckboxInput() false_values = ('false', '') def __init__(self, label=None, validators=None, false_values=None, **kwargs): super(BooleanField, self).__init__(label, validators, **kwargs) if false_values is not None: self.false_values = false_values def _value(self): if self.raw_data: return text_type(self.raw_data[0]) else: return 'y'class SubmitInput(Input): """ Renders a submit button. The field's label is used as the text of the submit button instead of the data on the field. """ input_type = 'submit' def __call__(self, field, **kwargs): kwargs.setdefault('value', field.label.text) return super(SubmitInput, self).__call__(field, **kwargs)
update:
出现这个问题的情况是使用 wtf.quick_form()时出现的,如果直接调用 form.button,那么生成的按钮是正常的。
update:
经测试,在ButtonTwoField(Field)的构造函数中,增加对于label的设定,可以将label改为空,但是依旧会被div包裹住.
import wtforms import Labelclass ButtonTwoField(Field): ''' 定义可以将按钮(button)用于 Flask 表单(form)的域(field) ''' widget = ButtonWidget() def __init__(self, text, name, value, **kwargs): super(ButtonTwoField, self).__init__(**kwargs) self.label=Label(field_id=999, text='' ) self.text = text self.value = value self.name = name def _value(self): return str(self.text)
编橙之家文章,
相关内容
- IntegerField的值怎样赋值后刷新后会为空的?,integerfi
- 如何确定一个python爬取得网页是否是被压缩的?,pyt
- flask搭建的个人博客怎么实现markdown,flaskmarkdown,个人是
- python式的桶排序,python式桶排序,用python写了一个桶
- gunicorn 启动问题,启动不了,gunicorn不了,终端输入noh
- OPTIONS请求没有得到正常的Response Headers,responseheaders,根
- 刚开始学Python,有一句看不懂。。。,python看不懂,小弟
- 求 django 如何实现多个model返回的queryset转成 list 格式,
- scrapy的运行方式,scrapy运行方式,用scrapy做了一个程
- 有没有类似phpstorm的python集成开发环境?,phpstormpytho
评论关闭