{% extends "base.html" %} {% from "macros/url.html" import prepend_bu_prefix %} {# Base template for create/edit form pages. Follows REST conventions: /resource/new (create), /resource/ (edit/delete) Adapted for Bootstrap 3. Required variables: - title: Page heading - is_update: bool - Edit mode (true) or create mode (false) Optional variables (have sensible defaults): - form_action: Defaults to list_url for create, request.path for edit - form_method: Defaults to POST for create, PUT for edit - success_url: Defaults to list_url (parent path) - cancel_url: Defaults to success_url - info_message: Optional info alert - use_form_handler: Set false for traditional POST forms Blocks: - form_fields: The form inputs (required) - form_buttons: Override default buttons - extra_content: Content after form #} {# Compute list URL (parent path) - works for both /new and / #} {% set _list_url = prepend_bu_prefix(request.path.rsplit('/', 1)[0] + '/') %} {# is_update should be passed directly from backend #} {% set _is_update = is_update | default(false) %} {# Apply defaults based on conventions #} {% set _form_action = form_action | default(_list_url if not _is_update else prepend_bu_prefix(request.path)) %} {% set _form_method = form_method | default('PUT' if _is_update else 'POST') %} {% set _success_url = success_url | default(_list_url) %} {% set _cancel_url = cancel_url | default(_success_url) %} {% block head_css %} {{ super() }} {% endblock %} {% block body %} {# Error alert - shown by JS on form errors, or by server on page load #} {% if info_message is defined and info_message %} {% endif %}

{{ title }}

{% if use_form_handler | default(true) %}
{% else %} {% endif %} {% block form_fields %}{% endblock %}
{% block form_buttons %} {% if _is_update %} {% endif %} Cancel {% endblock %}
{% block extra_content %}{% endblock %} {% endblock %} {% block tail %} {{ super() }} {% block page_scripts %}{% endblock %} {% endblock %}