如何解决 Flask 中使用 WTForm 时自定 Button 却在页面总被 Div 包裹住的问题

wtform中,我想定制一个button。

参考官方文档编写了ButtonFiledButtonWidgetobject以及ButtonInputInput.

为什么我用了与库中一摸一样的代码,只是改了个函数名字,在页面生成的却总会被包裹在一个 DIV中?且会被加上一个Label。

效果如图:

我的代码如下:

# !/usr/bin/env python
# coding: utf-8 from werkzeug.utils import escape
from wtforms import BooleanField,Field
from wtforms.widgets import HTMLString, html_params, Input, SubmitInput
from wtforms.compat import text_type __author__ = Jux.Liu class ButtonWidgetobject: 用于显示按钮button的部件widget def __call__self, field, **kwargs: kwargs.setdefaultname, field.name kwargs.setdefaultvalue, field.value kwargs.setdefaulttype, "submit" return HTMLString<button %s>%s</button> % html_params**kwargs, escapefield._value class ButtonInputInput: """ Renders a submit button. The fields 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.setdefaultvalue, field.label.text return superButtonInput, self.__call__field, **kwargs class ButtonOneFieldBooleanField: 定义可以将按钮button用于 Flask 表单form的域field widget = SubmitInput class ButtonTwoFieldField: 定义可以将按钮button用于 Flask 表单form的域field widget = ButtonWidget def __init__self, text, name, value, **kwargs: superButtonTwoField, self.__init__**kwargs self.text = text self.value = value self.name = name def _valueself: return strself.text

官方库代码截取如下:

class SubmitFieldBooleanField: """ Represents an ``<input type="submit">``. This allows checking if a given submit button has been pressed. """ widget = widgets.SubmitInput
class BooleanFieldField: """ 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: superBooleanField, self.__init__label, validators, **kwargs if false_values is not None: self.false_values = false_values def _valueself: if self.raw_data: return text_typeself.raw_data[0] else: return y class SubmitInputInput: """ Renders a submit button. The fields 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.setdefaultvalue, field.label.text return superSubmitInput, self.__call__field, **kwargs

update:
出现这个问题的情况是使用 wtf.quick_form时出现的,如果直接调用 form.button,那么生成的按钮是正常的。
update:
经测试,在ButtonTwoFieldField的构造函数中,增加对于label的设定,可以将label改为空,但是依旧会被div包裹住.

import wtforms import Label
class ButtonTwoFieldField: 定义可以将按钮button用于 Flask 表单form的域field widget = ButtonWidget def __init__self, text, name, value, **kwargs: superButtonTwoField, self.__init__**kwargs self.label=Labelfield_id=999, text= self.text = text self.value = value self.name = name def _valueself: return strself.text

你提到了 wtf.quick_form, 这个应该是 flask-bootstrap 中的方法, 这个方法是经过包装了的, 你可以看看:

路径: flask-bootstrap/flask_bootstrap/templates/bootstrap/wtf.html

http://blog.csdn.net/a6230978…
你可以看这篇

另外本人请教:
添加了自定义按钮后,在flask里面怎样检测到这个按钮被点击了呢?

发表评论

电子邮件地址不会被公开。 必填项已用*标注