summaryrefslogtreecommitdiff
path: root/ishtar_common/jinja_filters.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/jinja_filters.py')
-rw-r--r--ishtar_common/jinja_filters.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/ishtar_common/jinja_filters.py b/ishtar_common/jinja_filters.py
index e1e53cd66..cf19ef6c7 100644
--- a/ishtar_common/jinja_filters.py
+++ b/ishtar_common/jinja_filters.py
@@ -18,6 +18,7 @@
from datetime import datetime
+from jinja2.environment import Environment
from jinja2.filters import environmentfilter
import locale
from num2words import num2words
@@ -148,3 +149,53 @@ def short_date_filter(*args):
return ""
set_locale()
return value.strftime(settings.SHORT_DATE_FORMAT)
+
+
+@environmentfilter
+def splitpart(*args):
+ """
+ Split string.
+ First arg is index of first item to get
+ Second arg is last index of items to get not included (not mandatory - default is one item) - 0 to get just one
+ Third arg is character for split - default is ","
+ Last arg is character for join - default is ","
+
+ {{"9,2,10"|splitpart(1)}} -> 2
+ {{"chaise;bureau;papier;paragraphe"|splitpart(0,0,";")}} -> chaise
+ {{"182025_C001"|splitpart(1,0,"_")}} -> C001
+ {{"chaise;bureau;papier;paragraphe"|splitpart(1,3,";")}} -> bureau;papier
+ {{"chaise;bureau;papier;paragraphe"|splitpart(1,4,";","|")}} -> bureau|papier|paragraphe
+ """
+ # manage delta for environment filter
+ delta = 0
+ if isinstance(args[0], Environment):
+ delta = 1
+ value = args[0 + delta]
+ index = args[1 + delta]
+ index_end = args[2 + delta] if len(args) > (2 + delta) else None
+ char = args[3 + delta] if len(args) > (3 + delta) else ","
+ merge_character = args[4 + delta] if len(args) > (4 + delta) else None
+ if index_end:
+ try:
+ index_end = int(index_end)
+ if not merge_character: # merge is assumed
+ merge_character = char
+ except ValueError:
+ # old filter use - manage compatibility
+ merge_character = char
+ char = index_end
+ index_end = None
+ if not value or (not index and index != 0):
+ return ""
+ if merge_character is True: # old filter use
+ merge_character = char
+ splited = value.split(char)
+ if len(splited) <= index:
+ return ""
+ if not merge_character:
+ return splited[index]
+ if index_end:
+ splited = splited[index:index_end]
+ else:
+ splited = splited[index:]
+ return merge_character.join(splited)