內建模板
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'))
