{% from 'base/utils.html' import render_icon, arg_url_for %} {% macro build_url(record, endpoint, url_tuples, model, pk_field) %} {% if model != None %} {% set record = model.query.get(record[pk_field]) %} {% endif %} {% with url_params = {} -%} {%- do url_params.update(request.view_args if not endpoint else {}), url_params.update(request.args if not endpoint else {}) -%} {% for url_parameter, db_field in url_tuples %} {% if db_field.startswith(':') and '.' in db_field %} {%- set db_field = db_field[1:].split('.') -%} {%- do url_params.update({url_parameter: record[db_field[0]][db_field[1]]}) -%} {% elif db_field.startswith(':') %} {%- set db_field = db_field[1:] -%} {%- do url_params.update({url_parameter: record[db_field]}) -%} {% else %} {%- do url_params.update({url_parameter: db_field}) -%} {% endif %} {% endfor %} {{ arg_url_for(endpoint, url_params) }} {%- endwith %} {%- endmacro %} {% macro render_table(data, titles=None, primary_key='id', primary_key_title='#', caption=None, table_classes=None, header_classes=None, body_classes=None, responsive=False, responsive_class='table-responsive', safe_columns=None, urlize_columns=None, model=None, show_actions=False, actions_title='Actions', custom_actions=None, view_url=None, edit_url=None, delete_url=None, new_url=None, action_pk_placeholder=':id') %} {% if not titles %} {% set titles = get_table_titles(data, primary_key, primary_key_title) %} {% endif %} {% if responsive %}
{% endif %} {% if caption %} {% endif %} {% for title in titles %} {% endfor %} {% if show_actions %} {% endif %} {% for row in data %} {% for title in titles %} {% set key = title[0] %} {% set value = row[key] %} {%- if key == primary_key -%} {%- endif -%} {% endfor %} {% if show_actions %} {% endif %} {% endfor %}
{{ caption }}
{{ title[1] }}{{ actions_title }} {% if new_url %} {{ render_icon('plus-circle-fill') }} {% endif %}
{%- else -%} {%- endif -%} {%- if value is string -%} {%- if safe_columns and key in safe_columns -%} {{ value|safe }} {%- else -%} {%- if urlize_columns and key in urlize_columns -%} {{ value|urlize }} {%- else -%} {{ value }} {%- endif -%} {%- endif -%} {%- elif value.__class__.__base__.__name__ == 'Enum' -%} {{ value.value }} {%- else -%} {{ value }} {%- endif -%} {%- if key == primary_key -%} {%- else -%} {% if custom_actions %} {% for (action_name, action_icon, action_url) in custom_actions %} {{ render_icon(action_icon) }} {% endfor %} {% endif %} {% if view_url %} {{ render_icon('eye-fill') }} {% endif %} {% if edit_url -%} {{ render_icon('pencil-fill') }} {%- endif %} {% if delete_url %}
{% if csrf_token is undefined %} {{ raise('You have to enable the CSRFProtect extension from Flask-WTF to use delete_url, see the docs for more details (https://bootstrap-flask.readthedocs.io/en/stable/macros.html#render-table).') }} {% endif %}
{% endif %}
{% if responsive %}
{% endif %} {% endmacro %}