这是一个 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'>&times;</button>
          {{ m }}
        </div>
      {% endfor %}
    {% endif %}
  {% endwith %}
{% endmacro %}
  • menu_icon(item): 生成菜单项的图标,支持多种图标类型,包括 Glyphicon、Font Awesome 和图片。
  • menu(menu_root=None): 生成菜单结构,支持多级菜单和子菜单。
  • menu_links(links=None): 生成链接列表,用于显示一些额外的链接。
  • messages(): 生成消息提示,用于显示系统消息和错误信息。

这个模板宏可以帮助开发者快速构建 Flask-Admin 应用程序的菜单和消息提示功能,并根据需要进行定制化修改。

Flask-Admin 菜单和消息提示模板宏

原文地址: https://www.cveoy.top/t/topic/jzcH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录