diff --git a/core/views/__init__.py b/core/views/__init__.py index ce96c121..f72addb6 100644 --- a/core/views/__init__.py +++ b/core/views/__init__.py @@ -327,6 +327,8 @@ class DetailFormView(SingleObjectMixin, FormView): class AllowFragment: + """Add `is_fragment` to templates. It's only True if the request is emitted by htmx""" + def get_context_data(self, **kwargs): kwargs["is_fragment"] = self.request.headers.get("HX-Request", False) return super().get_context_data(**kwargs) diff --git a/docs/explanation/technos.md b/docs/explanation/technos.md index b1c67561..27066a7c 100644 --- a/docs/explanation/technos.md +++ b/docs/explanation/technos.md @@ -200,6 +200,19 @@ Grâce à son architecture, il est extrêmement bien adapté pour un usage dans un site multipage. C'est une technologie simple et puissante qui se veut comme le jQuery du web moderne. +### Htmx + +[Site officiel](https://htmx.org/) + +En plus de AlpineJS, l’interactivité sur le site est augmenté via Htmx. +C'est une librairie js qui s'utilise également au moyen d'attributs HTML à +ajouter directement dans les templates. + +Son principe est de remplacer certains éléments du html par un fragment de +HTML renvoyé par le serveur backend. Cela se mari très bien avec le +fonctionnement de django et en particulier de ses formulaires afin d'éviter +de doubler le travail pour la vérification des données. + ### Sass [Site officiel](https://sass-lang.com/) diff --git a/docs/reference/stock/models.md b/docs/reference/stock/models.md deleted file mode 100644 index 761e05d8..00000000 --- a/docs/reference/stock/models.md +++ /dev/null @@ -1 +0,0 @@ -::: stock.models \ No newline at end of file diff --git a/docs/reference/stock/views.md b/docs/reference/stock/views.md deleted file mode 100644 index 12222a4d..00000000 --- a/docs/reference/stock/views.md +++ /dev/null @@ -1 +0,0 @@ -::: stock.views \ No newline at end of file diff --git a/docs/tutorial/fragments.md b/docs/tutorial/fragments.md new file mode 100644 index 00000000..8f3c2ff3 --- /dev/null +++ b/docs/tutorial/fragments.md @@ -0,0 +1,12 @@ +Pour utiliser HTMX, on a besoin de renvoyer des fragments depuis le backend. +Le truc, c'est que tout est optimisé pour utiliser `base.jinja` qui est assez gros. + +Dans beaucoup de scénario, on veut pouvoir renvoyer soit la vue complète, soit +juste le fragment. En particulier quand on utilise l'attribut `hx-history` de htmx. + +Pour remédier à cela, il existe le mixin [AllowFragment][core.views.AllowFragment]. + +Une fois ajouté à une vue Django, il ajoute le boolean `is_fragment` dans les +templates jinja. Sa valeur est `True` uniquement si HTMX envoi la requette. +Il est ensuite très simple de faire un if/else pour hériter de +`core/base_fragment.jinja` au lieu de `core/base.jinja` dans cette situation. \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index f0cea1ad..3777e2e4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,6 +66,7 @@ nav: - Structure du projet: tutorial/structure.md - Gestion des permissions: tutorial/perms.md - Gestion des groupes: tutorial/groups.md + - Créer des fragments: tutorial/fragments.md - Etransactions: tutorial/etransaction.md - How-to: - L'ORM de Django: howto/querysets.md