Sith/docs/tutorial/fragments.md
2024-11-12 21:38:38 +01:00

1.3 KiB

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 envoie la requête. 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.

Exemple d'utilisation d'une vue avec fragment:

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)

{% 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 %}