美文网首页
flask-admin之自定义ModelView使不同行显示不同

flask-admin之自定义ModelView使不同行显示不同

作者: long2ice | 来源:发表于2019-03-18 22:22 被阅读0次

前言

如果有使用过django-suit—一个django admin的美化框架,这个框架的话,其admin设置中可以使用suit_row_attributes这个方法,在后台表单中设置表单列表中不同的行有不同的属性。这个方法在有些情况下很有用,比如说订单列表可以根据不同的订单状态在表单中呈现不同的样式,比如支付成功的可以设置为bootstrap的table-success,支付失败的可以设置为table-danger,这样在查看后台表单的时候可以更加一目了然。代码类似于下面这样:


    def suit_row_attributes(self, obj->Order, request):
        css = {
            2: 'table-success',
        }.get(obj.status)
        if css:
            return {'class': css}
            

这样在订单状态为2的一行的时候,该行会显示为绿色。

[图片上传失败...(image-d6529e-1552918902890)]

关于flask-admin

由于最近在使用flask这个框架,对应的admin管理使用的是flask-admin,同样需要像django-suit这样设置row attributes。

关于django和flask,flask是一个微服务框架,本身只提供了基本的请求响应处理等功能,并且可以很快的搭建一个rest api服务,但是如果需要其他的,比如ORM、权限管理、后台管理等扩展功能,就需要一个一个集成第三方扩展;而django提供的是一站式全方位解决方案,包含admin管理、ORM、权限控制、模板引擎等,具体该使用哪个框架,需要视业务场景而定。

回到flask-admin,这个扩展的功能还是比较强大的,包含了model view显示,action等功能,并且可以很方便的自定义。然而关于上面提到的需求,官方是没有自带的解决方案的,所以就只能重写list.html这个模板了。

解决方案

官方文档里有写:

To override any of the built-in templates, simply copy them from the Flask-Admin source into your project’s templates/admin/ directory. As long as the filenames stay the same, the templates in your project directory should automatically take precedence over the built-in ones.

就是说,如果你要重写模板,就简单的把flask-admin自带的模板复制到templates/admin/对应的模板下面,然后修改就行了,自已的模板优先级要更高一些。

然后复制list.html这个模板到flask的templates/admin/model目录下面,找到其对应table的地方,在115行这里:

image

明显这里tr没有任何的class和可供操作的地方,所以只能重写模板了。

重写后代码如下,flask使用的是jinja2模板语法:

image

然后在ModelView里面自定义ModelView:


class BaseModelView(ModelView):
    column_display_pk = True

    def is_accessible(self):
        return current_user.is_authenticated

    @abc.abstractmethod
    def row_attributes(self, obj):
        pass

其他的ModelVIew继承这个基类就行了,row_attributes这个方法跟django-suit框架使用方法一样:


    def row_attributes(self, obj):
        if obj.status == 2:
            return {'class': 'success'}

当该行的obj的status为2时,table的该row就会有success的样式了。

结语

总的来讲,flask-admin这个扩展还是很不错的,其可定制化很强,ModelView有很多可配置参数,具体可以查看官方文档。

博客地址:https://blog.long2ice.cn

相关文章

  • flask-admin之自定义ModelView使不同行显示不同

    前言 如果有使用过django-suit—一个django admin的美化框架,这个框架的话,其admin设置中...

  • flask-admin ModelView

    flask_admin model 官方文档https://flask-admin.readthedocs.io/...

  • iOS返回按钮自定义

    引子 iOS导航栏返回按钮的自定义,无非就是自定义文字和自定义图像。 自定义文字 想要返回按钮显示不同的文字,只需...

  • mvvm观察者

    1.在ModelView定义观察者 2.在ModelView请求成功后给观察者赋值 3.在dialog的onCre...

  • flutter自定义控件

    自定义可跟随父Widget弹出显示的弹窗效果。支持自定义事件,默认 转发、收藏、删除。有需要的小伙伴可以直接拿去使...

  • JavaBean

    MVC设计模式:(ModelView Controller)Class jsp Servlet Java...

  • 微信小程序自小程序自定义tabbar,不同页面显示不同tabba

    本文来源:微信小程序自定义底部导航栏,切换不同页面显示不同tabbar 微信小程序自定义不一样的tabBar 在一...

  • Android精品文章合集

    Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...

  • Flask-Admin 后台管理介绍

    Flask-Admin 后台管理 Flask-Admin是一个简单易用的Flask扩展,让你可以很方便并快速地为F...

  • 2021-03-19

    我们设计这个实验, 目的是使研究人员的不同行为作为实验条件(提出理由、承认感受和尽量不施加压力)要么存在,要么不存...

网友评论

      本文标题:flask-admin之自定义ModelView使不同行显示不同

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