@@ -22,21 +22,42 @@ class MyHomeAdmin(admin.HomeAdmin):
2222 # 获取默认页面
2323 page = await super ().get_page(request)
2424 # 自定义修改
25- page.body.title = ' MyHome'
25+ # page.body.title = 'MyHome' # page.body已改为list类型,该行废弃
26+ # 修改后台首页的内页标题
27+ page.title = ' MyHome'
28+ # 后台首页主体尾部追加内容
29+ page.body.append(' welcome FastApi-AMIS' )
2630 ...
2731 return page
2832```
2933
30- ## 示例-2(自定义模板管理基类)
34+ ## 示例-2.1(自定义模板管理基类)
35+
36+ 根目录` templates ` 文件夹中新建` element.html ` ,html内容如下:
37+ ``` html
38+ <!DOCTYPE html>
39+ <html lang =" en" >
40+ <head >
41+ <meta charset =" UTF-8" >
42+ <meta name =" viewport" content =" width=device-width, initial-scale=1.0" >
43+ <title >{{ title }}</title >
44+ </head >
45+ <body >
46+ <h1 >{{ title }}</h1 >
47+ <p >The current time is: {{ current_time }}</p >
48+ </body >
49+ </html >
50+ ```
3151
52+ main.py增加如下代码:
3253``` python linenums="1" hl_lines="6 7 11 20"
3354import datetime
3455
3556from fastapi_amis_admin import admin, amis
3657
3758
3859class MyJinja2Admin (admin .TemplateAdmin ):
39- templates: Jinja2Templates = Jinja2Templates(directory = ' apps/demo/ templates' )
60+ templates: Jinja2Templates = Jinja2Templates(directory = ' templates' )
4061
4162
4263@site.register_admin
@@ -53,9 +74,68 @@ class ElementTemplateAdmin(MyJinja2Admin):
5374 page_schema = amis.PageSchema(label = ' ElementUI' , icon = ' fa fa-link' )
5475 template_name = ' element.html'
5576
77+ async def get_page (self , request : Request) -> Dict[str , Any]:
78+ page = await super ().get_page(request)
79+ # 有别于示例1中 admin.HomeAdmin 对page的修改,这里的page来自 admin.TemplateAdmin,是一个dict
80+ page[' title' ] = ' Element Title' # 该行不会生效
81+ return {' current_time' : datetime.datetime.now(), ' title' : ' Element Content' }
82+
5683```
84+ ## 示例-2.2(将多个page以tab形式展示)
85+ 我们基于示例2.1进行修改,
86+ 1、首先将` SimpleTemplateAdmin ` 、` ElementTemplateAdmin ` 的页面注册装饰函数(` @site.register_admin ` )注释或删除。
87+ 2、我们创建一个Page管理页,然后将上述2个页面注册到` TemplatePageApp ` 下。
88+ ``` python
89+ from fastapi_amis_admin import admin, amis
90+ from fastapi_amis_admin.admin import AdminApp
91+ from fastapi_amis_admin.amis import TabsModeEnum
92+
93+
94+ @site.register_admin
95+ class TemplatePageApp (admin .AdminApp ):
96+ page_schema = PageSchema(label = " TemplatePage" , icon = " fa fa-link" , tabsMode = TabsModeEnum.chrome)
97+
98+ def __init__ (self , app : " AdminApp" ):
99+ super ().__init__ (app)
100+ self .register_admin(
101+ SimpleTemplateAdmin,
102+ ElementTemplateAdmin,
103+ )
104+ ```
105+ 此时,左侧菜单栏将会显示TemplatePageApp的类目,同时TemplatePageApp页面下则显示` SimpleTemplateAdmin ` 、` ElementTemplateAdmin ` 相关tab。
106+
57107
58108## 示例-3(重用模型管理类)
109+ 我们在* 模型管理* -示例2的基础上进行改造,将` Article ` 类新增一行属性` is_active: bool = False # add ` ,如下:
110+ ``` python linenums="1" hl_lines="32"
111+ class Article (Base ):
112+ __tablename__ = ' article'
113+
114+ id : Mapped[int ] = mapped_column(Integer, primary_key = True , autoincrement = True )
115+ title: Mapped[str ] = mapped_column(String(200 ), nullable = False )
116+ description: Mapped[str ] = mapped_column(String(400 ), default = ' ' )
117+ status: Mapped[bool ] = mapped_column(Boolean, default = False )
118+ content: Mapped[str ] = mapped_column(String, nullable = False )
119+ category_id: Mapped[Optional[int ]] = mapped_column(Integer, ForeignKey(' category.id' ))
120+ is_active: bool = False # add
121+
122+ ```
123+ 然后我们继承原油` ArticleAdmin ` 重新实现一个新的page类别:
124+ ``` python
125+ @site.register_admin
126+ class ActiveArticle (ArticleAdmin ):
127+ """ 继承重用`ArticleAdmin`;此示例较为简单,实际应用可能比较复杂."""
128+ page_schema = PageSchema(label = ' 文章管理(已激活)' , icon = ' fa fa-file' )
129+ # 自定义路由前缀
130+ router_prefix = ' /article.active'
131+
132+ # 重写基础选择器
133+ async def get_select (self , request : Request) -> Select:
134+ stmt = await super ().get_select(request)
135+ return stmt.where(Article.is_active == True )
136+ ```
137+ 此时,page中将分别有` 文章管理 ` 以及` 文章管理(已激活) ` ,后者将只显示` is_active ` 为True的文章。
138+ ## ~~~示例-3(重用模型管理类)~~~
59139
60140``` python linenums="1" hl_lines="32"
61141from fastapi_amis_admin import admin
0 commit comments