美文网首页geoflaskFlaskPython
[Flask] quick_form与render_kw的cla

[Flask] quick_form与render_kw的cla

作者: _Walker__ | 来源:发表于2018-11-23 00:20 被阅读343次
说明
  • quick_form:bootstrap/wtf.html里定义的宏,来自Flask-Bootstrap拓展。
正文

  wtforms字段的构造函数有一个render_kw参数,可以控制渲染内容的属性:

# 在input标签里,添加属性id=submit_by_kw
wtforms.SubmitField('提交', render_kw={'id': 'submit_by_kw'})

使用wtf.quick_form渲染后

<input class="btn btn-default" id="submit_by_kw" name="submit" type="submit" value="提交">

  从渲染的结果可以看到,quick_form默认情况下会给按钮添加class属性。若在使用quick_form的同时,也在render_kw里设置class属性,最终仅保留quick_form的设置。原因如下:

def render_field(self, field, render_kw):
    """
    render_field allows customization of how widget rendering is done.

    The default implementation calls ``field.widget(field, **render_kw)``
    """
    other_kw = getattr(field, 'render_kw', None)
    if other_kw is not None:
        render_kw = dict(other_kw, **render_kw)
    return field.widget(field, **render_kw)

  这是Flask-WTF渲染字段的源码,从中可以看出other_kw是创建Field对象是传入的render_kw参数,而这里的render_kw是从外面(也就是quick_form)传入的参数。渲染前会将二者合并(render_kw = dict(other_kw, **render_kw))。而合并的结果就是,第二个参数(**render_kw)的值被最终保留。

  想要同时保留双方的class值,可以重写render_field方法。

class RenderForm(FlaskForm):
    class Meta(FlaskForm.Meta):
        """
        重写render_field,实现Flask-Bootstrap与render_kw的class并存
        """
        def render_field(self, field, render_kw):
            other_kw = getattr(field, 'render_kw', None)
            if other_kw is not None:
                class1 = other_kw.get('class', None)
                class2 = render_kw.get('class', None)
                if class1 and class2:
                    render_kw['class'] = class2 + ' ' + class1
                render_kw = dict(other_kw, **render_kw)
            return field.widget(field, **render_kw)

  表单类继承自RenderForm后,里面定义的全部Field都可以实现class并存了。

class CustomForm(RenderForm):
    submit = Fields.SubmitField('提交', render_kw={'class': 'pull-right'})

  如果仅有个别Field需要class并存,可以在创建Field对象是指定_meta参数:

class CustomForm(FlaskForm):
    submit = Fields.SubmitField('提交', render_kw={'class': 'pull-right'}, _meta=RenderForm.Meta())

相关文章

  • [Flask] quick_form与render_kw的cla

    说明 quick_form:bootstrap/wtf.html里定义的宏,来自Flask-Bootstrap拓展...

  • Flask_wtf设置控件宽度

    flask默认的控件太长,如果要自定义控件宽度,只需要在表单加入render_kw属性. 例如:select_en...

  • 关于WTForm的冷知识

    quick_form()方法的参数 懒人专用生成表单的方法quick_form(),我之前都是傻呆呆的用,需要两栏...

  • 十三、分开Models和解决循环引用

    1、为什么要分开models 在第8篇文章给大家讲了一下Flask_SQLAlchemy的基本用法,那时候写Cla...

  • 2018-07-04

    Flask的使用 Flask是一个Python Web框架。与Django相比,Flask更为轻量化。(Flask...

  • Flask 常用库整理

    flask-script 为 Flask 提供强大的命令行操作,与 Django shell 类似。 Flask-...

  • Flask框架——flask-caching缓存

    上篇文章我们学习了Flask框架——Session与Cookie,这篇文章我们来学习Flask框架——flask-...

  • CLA

    AMG风口

  • 十二、Flask_Script介绍与安装

    1、flask_script 的介绍与安装 flask_script的作用是可以通过命令行的形式来操作flask例...

  • Flask 轻博客

    取自实验楼实验Flask开发轻博客 作为Flask入门系列感觉不错,最近在学习《 Flask Web 开发 》,与...

网友评论

    本文标题:[Flask] quick_form与render_kw的cla

    本文链接:https://www.haomeiwen.com/subject/tlqdqqtx.html