flask_admin 笔记五 内置模板设置
内建模板
Flask-Admin是使用jinja2模板引擎
1)扩展内建的模板
不要完全覆盖内置的模板,最好是扩展它们。 这将使您更容易升级到新的Flask-Admin版本。
在内部,Flask-Admin模板是从admin / master.html模板派生的。 三个最有趣的扩展模板可能是:
- admin/model/list.html
- admin/model/create.html
- admin/model/edit.html
为了扩展默认的编辑模板功能,你可以创建一个模板templates/micrblog_edit.html 去代替它:
{% extends 'admin/model/edit.html' %} {% block body %} <h1>MicroBlog Edit View</h1> {{ super() }} {% endblock %}
接着,需要视图类使用这个模板,需设置属性:
class MicroBlogModelView(ModelView): edit_template = 'microblog_edit.html' # create_template = 'microblog_create.html' # list_template = 'microblog_list.html'
如果您想使用自己的基本模板,则在初始化期间将模板的名称传递给管理构造函数:
admin = Admin(app, base_template='microblog_master.html')
2)重写内置的模板
要完全控制管理界面的样式和布局,可以覆盖所有内置模板。 请记住,从Flask-Admin的一个版本到下一个版本的模板会略有变化,所以一旦你开始覆盖它们,你需要小心升级你的软件包版本。
要覆盖任何内置模板,只需将它们从Flask-Admin源代码复制到项目的templates/admin /目录中即可。 只要文件名保持不变,项目目录中的模板应该自动优先于内置模板。
3)可用的模板块
Flask-Admin在admin / master.html中定义了一个基本模板,即所有其他管理模板都是从其派生的。 该模板是指向admin / base.html的代理,它定义了以下块:
模块名 |
描述 |
Head_meta |
头部标签 |
title |
标题 |
Head_css |
头部存放样式 |
head |
头部其他内容 |
Page_body |
页面布局 |
brand |
菜单的商标 |
Main_menu |
菜单 |
Menu_links |
菜单链接 |
Access_control |
菜单右边的登录按钮 |
message |
提醒的信息 |
body |
内容区 |
tail |
内容区下面的区域 |
除了从admin / master.html继承的所有块之外,admin / model / list.html模板还包含以下块:
Block Name |
Description |
model_menu_bar |
Menu bar |
model_list_table |
Table container |
list_header |
Table header row |
list_row_actions_header |
Actions header |
list_row |
Single row |
list_row_actions |
Row action cell with edit/remove/etc buttons |
empty_list_message |
Message that will be displayed if there are no models found |
查看https://github.com/flask-admin/flask-admin/tree/master/examples/layout上的布局示例,了解如何对管理界面进行全面的风格控制。
4)环境变量
在扩展admin / master.html的任何模板中工作时,您都可以访问少量的环境变量:
Variable Name |
Description |
admin_view |
Current administrative view |
admin_base_template |
Base template name |
_gettext |
Babel gettext |
_ngettext |
Babel ngettext |
h |
Helpers from helpers module |
5)产生url链接
要生成特定视图的网址,请使用带点前缀的url_for:
from flask import url_for class MyView(BaseView): @expose('/') def index(self): # Get URL for the test view method user_list_url = url_for('user.index_view') return self.render('index.html', user_list_url=user_list_url)
一个特定的记录也可以引用:
# Edit View for record #1 (redirect back to index_view) url_for('user.edit_view', id=1, url=url_for('user.index_view'))
引用ModelView实例时,在调用url_for时使用模型的小写名称作为前缀。 其他视图可以通过为每个视图指定唯一的端点并将其用作前缀来引用。 所以,你可以使用:
url_for('analytics.index')
指向以下的视图:
admin.add_view(CustomView(name='Analytics', endpoint='analytics'))