{% extends 'admin/master.html' %} {% block body %}

local_config.py editor {% if writable %} writable {% else %} read-only {% endif %}

Edit runtime configuration stored in {{ path }}. Changes are written to disk atomically and applied to the running app where possible. Restart-only keys are marked with a badge.

{# Flash messages are rendered by Flask-Admin's master.html — do not duplicate them here, otherwise every notice shows twice. #} {% if not grouped_rows %}

Current entries

No editable entries in local_config.py yet.

{% else %} {% for group in grouped_rows %}

{{ group.name }}

{% if group.ident != '_other' %}
{% endif %}
{% for row in group.rows %} {% endfor %}
Key Type Value Actions
{{ row.key }} {% if row.restart_only %} restart {% endif %} {% if row.is_protected %} protected {% endif %}
{% if row.is_protected %} {% elif row.type == 'bool' %} {% elif row.type == 'none' %} {% else %} {% endif %}
{% if row.is_protected %} no delete {% else %}
{% endif %}
{% endfor %} {% endif %} {% if presets %}

Quick configurations

One-click presets that bundle a set of related keys with sensible defaults. Tweak the values inline before saving — every preset runs through the same validation as the manual editor above.

{% for preset in presets %}
{{ preset.description }}
{% for entry in preset['keys'] %} {% endfor %}
Key Type Value
{{ entry.key }} {% if entry.exists %} set {% endif %} {{ entry.type }} {% if entry.type == 'bool' %} {% else %} {% endif %} {% if entry.hint %} {{ entry.hint }} {% endif %}
{% if preset.note %}
{{ preset.note }}
{% endif %} Empty str values are skipped — only filled fields are written.
{% endfor %}
{% endif %}

Add new entry

Only primitive values are accepted here (str / int / float / bool / null). For lists or nested dicts, edit local_config.py manually.

{% endblock %}