2024-10-19 14:24:49 +00:00
|
|
|
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
|
2024-11-12 20:38:38 +00:00
|
|
|
templates jinja. Sa valeur est `True` uniquement si HTMX envoie la requête.
|
2024-10-19 14:24:49 +00:00
|
|
|
Il est ensuite très simple de faire un if/else pour hériter de
|
2024-11-11 12:56:34 +00:00
|
|
|
`core/base_fragment.jinja` au lieu de `core/base.jinja` dans cette situation.
|
|
|
|
|
|
|
|
Exemple d'utilisation d'une vue avec fragment:
|
|
|
|
|
|
|
|
```python
|
|
|
|
from django.views.generic import TemplateView
|
|
|
|
from core.views import AllowFragment
|
|
|
|
|
|
|
|
class FragmentView(AllowFragment, TemplateView):
|
|
|
|
template_name = "my_template.jinja"
|
|
|
|
```
|
|
|
|
|
|
|
|
Exemple de template (`my_template.jinja`)
|
|
|
|
```jinja
|
|
|
|
{% if is_fragment %}
|
|
|
|
{% extends "core/base_fragment.jinja" %}
|
|
|
|
{% else %}
|
|
|
|
{% extends "core/base.jinja" %}
|
|
|
|
{% endif %}
|
|
|
|
|
|
|
|
|
|
|
|
{% block title %}
|
|
|
|
{% trans %}My view with a fragment{% endtrans %}
|
|
|
|
{% endblock %}
|
|
|
|
|
|
|
|
{% block content %}
|
|
|
|
<h3>{% trans %}This will be a fragment when is_fragment is True{% endtrans %}
|
|
|
|
{% endblock %}
|
|
|
|
```
|