Surcharge des templates admin
L'admin Runique permet de remplacer n'importe quel template par un template personnalisé,
Principe : 3 niveaux d'héritage
admin_template.html ← niveau 1 : contrat Runique (ne pas toucher)
↓ extends
admin_base.html ← niveau 2 : layout par défaut (peut être remplacé)
↓ extends
list.html / create.html … ← niveau 3 : composants CRUD (peuvent être remplacés)
Le dev peut remplacer le niveau 2 (layout global) et/ou le niveau 3 (pages individuelles).
Surcharger le layout global (`admin_base.html`)
Créer un fichier qui hérite de admin_template et remplit les blocks de layout.
templates/mon_theme/admin_base.html
{% extends "admin/admin_template.html" %}
{% block extra_css %}
<link rel="stylesheet" href="{{ "css/mon_theme.css" | runique_static }}">
{% endblock %}
{% block sidebar %}
<nav class="mon-sidebar">
<h2>{{ site_title }}</h2>
<ul>
{% for res in resources %}
<li>
<a href="{{ admin_prefix }}/{{ res.key }}/list"
{% if res.key == current_resource %}class="active"{% endif %}>
{{ res.title }}
</a>
</li>
{% endfor %}
</ul>
</nav>
{% endblock %}
{% block topbar %}
<header class="mon-topbar">
{% block breadcrumb %}{% endblock %}
<form method="POST" action="{{ admin_prefix }}/logout">
{% csrf %}
<button type="submit">{{ current_user.username }} — Déconnexion</button>
</form>
</header>
{% endblock %}
{% block extra_js %}
<script src="{{ "js/mon_admin.js" | runique_static }}" defer></script>
{% endblock %}
Note :
admin/admin_template.htmlest la clé Tera, pas un chemin de fichier.
Déclarer le template custom dans la config
RuniqueApp::builder(config)
.with_admin(|a| a
.templates(|t| t
.with_list("mon_theme/list.html")
.with_create("mon_theme/create.html")
.with_edit("mon_theme/edit.html")
.with_detail("mon_theme/detail.html")
.with_delete("mon_theme/delete.html")
.with_dashboard("mon_theme/dashboard.html")
.with_login("mon_theme/login.html")
.with_base("mon_theme/admin_base.html")
)
)
.build().await?
Surcharger un composant CRUD spécifique
Pour remplacer uniquement la page de liste des utilisateurs :
templates/mon_theme/users_list.html
{% extends "mon_theme/admin_base.html" %}
{% block content %}
<h1>{{ resource.title }}</h1>
<p>{{ total }} entrée(s)</p>
{% for entry in entries %}
<div class="user-card">
<span>#{{ entry.id }}</span>
<span>{{ entry.username }}</span>
</div>
{% endfor %}
{% endblock %}
Blocks disponibles pour la surcharge
Voir la référence complète des blocks — liste exhaustive par template avec les variables CSS surchargeables.
Points d'attention
current_resourceest une String (la clé, ex:"users"), pas un objet. Utiliserresource.keyetresource.titlepour les métadonnées.- Si
{% block extra_js %}est surchargé, appeler{{ super() }}pour ne pas perdreadmin.js. - Si
{% block extra_css %}est surchargé, appeler{{ super() }}pour conserver le CSS Runique. - Les éléments hors-blocks (
<meta csrf-token>,<script csrf.js>) sont garantis paradmin_template— ils ne peuvent pas être supprimés par surcharge. - Si
{% block messages %}est redéfini, conserver{% messages %}dedans.
Sous-sections
| Section | Description |
|---|---|
| Référence des blocks | Liste complète des blocks par template + variables CSS |
| Exemples | 3 approches : héritage Runique, layout custom, HTML autonome |
| Clés de contexte | Variables injectées par le backend dans chaque template |
| CSRF | Token CSRF, csrf.js, checklist login custom |
Revenir au sommaire
| Section | Description |
|---|---|
| Sommaire template | Sommaire templates |
| Sommaire | Sommaire admin |