Exemple de comment créer une liste d'éléments à partir d'une chaîne de caractères dans un template sous django
Introduction
Prenons par exemple la table suivante (intitulée Note) dans le fichier models.py comprenant la ligne tags (models.TextField(): chaîne de caractères)
class Note(models.Model):... = ...... = ...... = ...tags = models.TextField()
tags est utilisé pour stocker des labels séparés par un point virgule ; (i.e. for example: New_York; Travel; Photo).
L'objectif est de créer une liste d'éléments à partir de tags dans un template.
Créer un filtre
La structure d'une application django ressemble à:
/my_app//templates//static/models.pyviews.py
dans le dossier my_app, créer un dossier intitulé templatetags:
mkdir templatetags
on a alors
/my_app//templates//static/models.pyviews.py/templatetags/
aller dans le dossier templatetags et creer un fichier vide
__init__.py
puis in fichier intitulé filter.py
from django import templateregister = template.Library()@register.filter(name='split')def split(value, key):"""Returns the value turned into a list."""return value.split(key)
Editer le fichier settings.py
Ajouter dans le fichier settings.py:
'libraries':{# make your file entry here.'filter_tags': 'my_app.templatetags.filter',}
donne
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],'libraries':{# make your file entry here.'filter_tags': 'my_app.templatetags.filter',}},},]
Créer une vue dans le fichier views.py
Créer une vue et passer la table note:
from .models import Notedef images_view(request):.........note_obj = Note.objects.all()context = {'note_obj':note_obj}return render(request, "my_app/template.html", context )
Créer une liste dans un template en utilisant le filtre
Dans template.html ajouter en haut la ligne suivante:
{% load filter_tags %}
maintenant on peut utiliser le filtre pour boucler sur les labels:
{% with note_obj.tags|split:";" as tags %}{% for tag in tags %}{{tag}}{% endfor %}{% endwith %}
Références
| Liens | Site |
|---|---|
| Django How can i split string using template tag | stackoverflow |
| Custom template tags and filters | stackoverflow |
| how to split the string in django template? | stackoverflow |
