Flask-Admin 菜单和消息提示模板宏
这是一个 Flask-Admin 的模板宏,用于生成菜单和消息提示。模板宏是 Flask-Admin 中用于生成 HTML 片段的可重用代码块。
{% macro menu_icon(item) -%}
{% set icon_type = item.get_icon_type() %}
{%- if icon_type %}
{% set icon_value = item.get_icon_value() %}
{% if icon_type == 'glyph' %}
<i class='glyphicon {{ icon_value }}'></i>
{% elif icon_type == 'fa' %}
<i class='fa {{ icon_value }}'></i>
{% elif icon_type == 'image' %}
<img src='{{ url_for('static', filename=icon_value) }}' alt='menu image'>
{% elif icon_type == 'image-url' %}
<img src='{{ icon_value }}' alt='menu image'>
{% endif %}
{% endif %}
{%- endmacro %}
{% macro menu(menu_root=None) %}
{% if menu_root is none %}{% set menu_root = admin_view.admin.menu() %}{% endif %}
{%- for item in menu_root %}
{%- if item.is_category() -%}
{% set children = item.get_children() %}
{%- if children %}
{% set class_name = item.get_class_name() or '' %}
{%- if item.is_active(admin_view) %}
<li class='active dropdown{% if class_name %} {{class_name}}{% endif %}'>
{% else -%}
<li class='dropdown{% if class_name %} {{class_name}}{% endif %}'>
{%- endif %}
<a class='dropdown-toggle' data-toggle='dropdown' href='javascript:void(0)'>
{% if item.class_name %}<span class='{{ item.class_name }}'></span> {% endif %}
{{ menu_icon(item) }}{{ item.name }}
{%- if 'dropdown-submenu' in class_name -%}
<i class='glyphicon glyphicon-chevron-right small'></i>
{%- else -%}
<i class='glyphicon glyphicon-chevron-down small'></i>
{%- endif -%}
</a>
<ul class='dropdown-menu'>
{%- for child in children -%}
{%- if child.is_category() -%}
{{ menu(menu_root=[child]) }}
{% else %}
{% set class_name = child.get_class_name() %}
{%- if child.is_active(admin_view) %}
<li class='active{% if class_name %} {{class_name}}{% endif %}'>
{% else %}
<li{% if class_name %} class='{{class_name}}'{% endif %}>
{%- endif %}
<a href='{{ child.get_url() }}'{% if child.target %} target='{{ child.target }}'{% endif %}>
{{ menu_icon(child) }}{{ child.name }}</a>
</li>
{%- endif %}
{%- endfor %}
</ul>
</li>
{% endif %}
{%- else %}
{%- if item.is_accessible() and item.is_visible() -%}
{% set class_name = item.get_class_name() %}
{%- if item.is_active(admin_view) %}
<li class='active{% if class_name %} {{class_name}}{% endif %}'>
{%- else %}
<li{% if class_name %} class='{{class_name}}'{% endif %}>
{%- endif %}
<a href='{{ item.get_url() }}'{% if item.target %} target='{{ item.target }}'{% endif %}>{{ menu_icon(item) }}{{ item.name }}</a>
</li>
{%- endif -%}
{% endif -%}
{% endfor %}
{% endmacro %}
{% macro menu_links(links=None) %}
{% if links is none %}{% set links = admin_view.admin.menu_links() %}{% endif %}
{% for item in links %}
{% set class_name = item.get_class_name() %}
{% if item.is_accessible() and item.is_visible() %}
<li{% if class_name %} class='{{ class_name }}'{% endif %}>
<a href='{{ item.get_url() }}'>{{ menu_icon(item) }}{{ item.name }}</a>
</li>
{% endif %}
{% endfor %}
{% endmacro %}
{% macro messages() %}
{% with messages = get_flashed_messages(with_categories=True) %}
{% if messages %}
{% for category, m in messages %}
{% if category %}
{# alert-error changed to alert-danger in bootstrap 3, mapping is for backwards compatibility #}
{% set mapping = {'message': 'info', 'error': 'danger'} %}
<div class='alert alert-{{ mapping.get(category, category) }} alert-dismissable'>
{% else %}
<div class='alert alert-dismissable'>
{% endif %}
<button type='button' class='close' data-dismiss='alert' aria-hidden='true'>×</button>
{{ m }}
</div>
{% endfor %}
{% endif %}
{% endwith %}
{% endmacro %}
menu_icon(item): 生成菜单项的图标,支持多种图标类型,包括 Glyphicon、Font Awesome 和图片。menu(menu_root=None): 生成菜单结构,支持多级菜单和子菜单。menu_links(links=None): 生成链接列表,用于显示一些额外的链接。messages(): 生成消息提示,用于显示系统消息和错误信息。
这个模板宏可以帮助开发者快速构建 Flask-Admin 应用程序的菜单和消息提示功能,并根据需要进行定制化修改。
原文地址: https://www.cveoy.top/t/topic/jzcH 著作权归作者所有。请勿转载和采集!