适当减少手机使用,有助于视力保护... 新的一年祝您:身体健康,阖家欢乐!~~

flask-admin 显示当前modelview类中的所有路由

浏览量:825 作者:admin 类别:: 学习小记 更新时间:2023-05-21 20:51:16

Flask-Admin 不会直接显示当前 ModelView 类中的所有路由,但你可以通过一些扩展来实现自定义管理界面和添加自定义页面。以下是一些实现的示例:

1. 使用 `CompositeView` 扩展:`CompositeView` 扩展可以将多个视图组合成一个完整的管理界面,其中包括模板、视图、URL 路由等。你可以继承 `CompositeView` 类,并使用 `add_view()` 方法添加多个视图,然后将视图组合成一个完整的页面。

```python
from flask_admin import Admin, BaseView, expose
from flask_admin.contrib.sqla import ModelView
from flask_admin.model.template import macro

app = Flask(__name__)
admin = Admin(app, template_mode='bootstrap3')

class CustomView(BaseView):
    @expose('/')
    def index(self):
        return self.render('admin/custom.html')

class CustomModelView(ModelView):
    column_exclude_list = ('password', 'credit_card')
    
class MyCompositeView(CompositeView):
    @expose('/')
    def index(self):
        return self.render('admin/index.html')

    def __init__(self, name=None, title=None):
        super(MyCompositeView, self).__init__(name=name, template='admin/page.html',
            views=[CustomView(), CustomModelView(MyModel), CustomModelView(MyOtherModel)])

admin.add_view(MyCompositeView(name='Composite View', title='Composite Views'))
```

在以上示例代码中,我们定义了三个视图:`CustomView`、`CustomModelView` 和 `MyCompositeView`。`CustomView` 和 `CustomModelView` 分别用于定义自定义的视图和模板,而 `MyCompositeView` 则通过 `CompositeView` 方法将它们组合成一个完整的管理界面。你可以将需要管理的多个模型视图作为参数传入 `CompositeView` 的构造函数中,然后使用 `add_views()` 方法将它们组合成一个页面。

2. 使用 `AdminIndexView` 扩展:`AdminIndexView` 扩展可以定义自定义的管理界面,其中包括多个子页面、模板和 URL 路由。你可以继承 `AdminIndexView` 类,并重载 `get_admin_context()` 方法返回一个包含需要展示的自定义页面的字典。

```python
from flask_admin import Admin, BaseView, expose
from flask_admin.contrib.sqla import ModelView
from flask_admin.model.template import macro
from flask_admin.base import AdminIndexView

app = Flask(__name__)
admin = Admin(app, template_mode='bootstrap3')

class CustomView(BaseView):
    @expose('/')
    def index(self):
        return self.render('admin/custom.html')

class CustomModelView(ModelView):
    column_exclude_list = ('password', 'credit_card')
    
class MyAdminIndexView(AdminIndexView):
    @expose('/')
    def index(self):
        model_view_list = [
            {'name': 'MyModel', 'view': CustomModelView(MyModel)},
            {'name': 'MyOtherModel', 'view': CustomModelView(MyOtherModel)},
            {'name': 'Custom', 'view': CustomView()}
        ]
        return self.render('admin/index.html', model_view_list=model_view_list)

admin.index_view = MyAdminIndexView()

admin.add_view(CustomModelView(MyModel))
admin.add_view(CustomModelView(MyOtherModel))
admin.add_view(CustomView())
```

在以上示例代码中,我们定义了三个视图:`CustomView`、`CustomModelView` 和 `MyAdminIndexView`。`CustomView` 和 `CustomModelView` 分别用于定义自定义的视图和模板,而 `MyAdminIndexView` 则重载了 `get_admin_context()` 方法,并定义了需要展示的自定义页面和子页面的列表。你可以将需要管理的多个模型视图作为参数传入 `MyAdminIndexView` 的构造函数中,然后通过 `render()` 方法将其展示到管理界面中。

以上两种方法都可以用来将多个视图合并成一个完整的管理界面并定制自定义页面。你可以实现不同的模型视图和子页面,并将它们组合成一个完整的页面,以满足不同业务需求。

关于博主
北京南城网络及弱电【张工】为您提供:
校园网、楼宇、村镇、园区,光纤网络覆盖,无线覆盖 华为|H3c|锐捷|爱快|panabit等品牌,路由、交换机、AC、AP 无源光网络(PON)设备,布署、调试、维运,等服务...
应急/临时光纤熔接...[藤仓22S]
博文为学习python所写:内容摘自网络、学习笔记、记事备忘。
QQ:872876353,欢迎交流学习、加Q注明来意。

诗文鉴赏

《满江红》· 岳飞
落星侵晓没,
残月半山低。
怒发冲冠,
凭栏处、潇潇雨歇。
抬望眼、仰天长啸,壮怀激烈。
三十功名尘与土,八千里路云和月。
莫等闲、白了少年头,
空悲切。
源于生活-记录日常
The site based on python 3 with flask...