Extension : rendu de Markdown
Django-DSFR inclut une extension Markdown qui permet de réaliser le rendu de Markdown en HTML spécialisé pour le DSFR, incluant par exemple les tableaux, des mises en exergue, etc.
Ce rendu de Markdown s’effectue à l’aide du template filter dsfr_md.
Pré-requis
Installation d’un groupe de dépendances spécifique à cette extension via l’instruction d’installation suivante dans le pyproject.toml :
"django-dsfr[markdown]",
Utilisation
Dans un template Django :
{% load dsfr_md_tags %}
{{ mon_contenu_markdown|dsfr_md }}
Exemples
Classe personnalisée
Le document Markdown suivant :
#### Titre 4 affiché comme titre 6 {: .fr-h6 }
Sera rendu :
Titre 4 affiché comme titre 6
<h4 class="fr-h6">Titre 4 affiché comme titre 6</h4>
Lien externe
Le document Markdown suivant :
Texte contenant [un lien vers un autre site](https://www.systeme-de-design.gouv.fr/)
Sera rendu :
Texte contenant un lien vers un autre site
<p>Texte contenant <a href="https://www.systeme-de-design.gouv.fr/" rel="noopener external" target="_blank" title="un lien vers un autre site - nouvelle fenêtre">un lien vers un autre site</a></p>
Mise en exergue
Le document Markdown suivant :
!! note ""
Texte de la mise en exergue.
Sera rendu :
Texte de la mise en exergue.
<div class="fr-highlight note">
<p>Texte de la mise en exergue.</p>
</div>
Mise en avant minimale
Le document Markdown suivant :
!!! note ""
Texte de la mise en avant.
Sera rendu :
Texte de la mise en avant.
<div class="fr-callout note">
<p class="fr-callout__text">Texte de la mise en avant.</p>
</div>
Mise en avant avec titre
Le document Markdown suivant :
!!! note "Attention !"
Texte de la mise en avant.
Sera rendu :
Attention !
Texte de la mise en avant.
<div class="fr-callout note">
<p class="fr-callout__title">Attention !</p>
<p class="fr-callout__text">Texte de la mise en avant.</p>
</div>
Mise en avant avec titre et icône
Le document Markdown suivant :
!!! warning-line "Attention !"
Texte de la mise en avant.
Sera rendu :
<div class="fr-callout fr-icon-warning-line">
<p class="fr-callout__title">Attention !</p>
<p class="fr-callout__text">Texte de la mise en avant.</p>
</div>
Citation
Le document Markdown suivant :
> Texte d’une citation…
qui peut être sur plusieurs lignes.
Jusqu’à la prochaine ligne vide.
Sera rendu :
Texte d’une citation…
qui peut être sur plusieurs lignes.
Jusqu’à la prochaine ligne vide.
<figure class="fr-quote">
<blockquote>
<p>Texte d’une citation…<br />
qui peut être sur plusieurs lignes.</p>
</blockquote>
</figure>
<p>Jusqu’à la prochaine ligne vide.</p>
Tableau simple
Le document Markdown suivant :
| Colonne 1 | Colonne 2 |
|--------------------|--------------------|
| Ligne 1, colonne 1 | Ligne 1, colonne 2 |
| Ligne 2, colonne 1 | Ligne 2, colonne 2 |
Sera rendu :
| Colonne 1 | Colonne 2 |
|---|---|
| Ligne 1, colonne 1 | Ligne 1, colonne 2 |
| Ligne 2, colonne 1 | Ligne 2, colonne 2 |
<div class="fr-table">
<div class="fr-table__wrapper">
<div class="fr-table__container">
<div class="fr-table__content">
<table>
<thead>
<tr>
<th>Colonne 1</th>
<th>Colonne 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ligne 1, colonne 1</td>
<td>Ligne 1, colonne 2</td>
</tr>
<tr>
<td>Ligne 2, colonne 1</td>
<td>Ligne 2, colonne 2</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
Document complet avec table des matières
Le document Markdown suivant :
[TOC]
# Titre de niveau 1
Contenu *avec* de la **mise en forme** et même un lien vers [la doc de django-dsfr](https://numerique-gouv.github.io/django-dsfr/).
## Titre de niveau 2 affiché comme niveau 6 {: .fr-h6 }
Liste à puces :
- Premier élément ;
- Second élément.
# Titre de niveau 1 à nouveau
## Démo de mise en avant
!!! warning-line "Attention !"
Contenu de la mise en avant
## Démo de mise en exergue
!! note
Contenu de la mise en exergue
## Démo de citation
> Texte d’une citation…
qui peut être sur plusieurs lignes.
Jusqu’à la prochaine ligne vide.
## Démo de tableau
| Colonne 1 | Colonne 2 |
|--------------------|--------------------|
| Ligne 1, colonne 1 | Ligne 1, colonne 2 |
| Ligne 2, colonne 1 | Ligne 2, colonne 2 |
Sera rendu :
Titre de niveau 1
Contenu avec de la mise en forme et même un lien vers la doc de django-dsfr.
Titre de niveau 2 affiché comme niveau 6
Liste à puces :
- Premier élément ;
- Second élément.
Titre de niveau 1 à nouveau
Démo de mise en avant
Démo de mise en exergue
Contenu de la mise en exergue
Démo de citation
Texte d’une citation…
qui peut être sur plusieurs lignes.
Jusqu’à la prochaine ligne vide.
Démo de tableau
| Colonne 1 | Colonne 2 |
|---|---|
| Ligne 1, colonne 1 | Ligne 1, colonne 2 |
| Ligne 2, colonne 1 | Ligne 2, colonne 2 |
<nav aria-labelledby="fr-summary-title" class="fr-summary" role="navigation"><h2 class="fr-summary__title" id="fr-summary-title">Sommaire</h2><ol>
<li><a class="fr-summary__link" href="#titre-de-niveau-1">Titre de niveau 1</a><ol>
<li><a class="fr-summary__link" href="#titre-de-niveau-2-affiche-comme-niveau-6">Titre de niveau 2 affiché comme niveau 6</a></li>
</ol>
</li>
<li><a class="fr-summary__link" href="#titre-de-niveau-1-a-nouveau">Titre de niveau 1 à nouveau</a><ol>
<li><a class="fr-summary__link" href="#demo-de-mise-en-avant">Démo de mise en avant</a></li>
<li><a class="fr-summary__link" href="#demo-de-mise-en-exergue">Démo de mise en exergue</a></li>
<li><a class="fr-summary__link" href="#demo-de-citation">Démo de citation</a></li>
<li><a class="fr-summary__link" href="#demo-de-tableau">Démo de tableau</a></li>
</ol>
</li>
</ol>
</nav>
<h1 id="titre-de-niveau-1">Titre de niveau 1</h1>
<p>Contenu <em>avec</em> de la <strong>mise en forme</strong> et même un lien vers <a href="https://numerique-gouv.github.io/django-dsfr/" rel="noopener external" target="_blank" title="la doc de django-dsfr - nouvelle fenêtre">la doc de django-dsfr</a>.</p>
<h2 class="fr-h6" id="titre-de-niveau-2-affiche-comme-niveau-6">Titre de niveau 2 affiché comme niveau 6</h2>
<p>Liste à puces :</p>
<ul>
<li>Premier élément ;</li>
<li>Second élément.</li>
</ul>
<h1 id="titre-de-niveau-1-a-nouveau">Titre de niveau 1 à nouveau</h1>
<h2 id="demo-de-mise-en-avant">Démo de mise en avant</h2>
<div class="fr-callout fr-icon-warning-line">
<p class="fr-callout__title">Attention !</p>
<p class="fr-callout__text">Contenu de la mise en avant</p>
</div>
<h2 id="demo-de-mise-en-exergue">Démo de mise en exergue</h2>
<div class="fr-highlight note">
<p>Contenu de la mise en exergue</p>
</div>
<h2 id="demo-de-citation">Démo de citation</h2>
<figure class="fr-quote">
<blockquote>
<p>Texte d’une citation…<br />
qui peut être sur plusieurs lignes.</p>
</blockquote>
</figure>
<p>Jusqu’à la prochaine ligne vide.</p>
<h2 id="demo-de-tableau">Démo de tableau</h2>
<div class="fr-table">
<div class="fr-table__wrapper">
<div class="fr-table__container">
<div class="fr-table__content">
<table>
<thead>
<tr>
<th>Colonne 1</th>
<th>Colonne 2</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ligne 1, colonne 1</td>
<td>Ligne 1, colonne 2</td>
</tr>
<tr>
<td>Ligne 2, colonne 1</td>
<td>Ligne 2, colonne 2</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>