J'utilise le moteur de modèle Jinja2 (+ pelican).
J'ai une chaîne disant "un 1", et je cherche un moyen de diviser cette chaîne en deux en utilisant l'espace blanc comme délimiteur.
Donc, le résultat final que je recherche est une variable qui contient les deux valeurs sous la forme d'un tableau. par exemple. str [0] est évalué à "a" & str [1] est évalué à "1".
Merci d'avance.
J'ai eu le même problème et je n'ai rien trouvé d'utile, alors je viens de créer un filtre personnalisé:
def split_space(string):
return string.strip().split()
Ajouté à la liste de filtres (avec flacon):
app = Flask(__name__)
def split_space(string):
return string.strip().split()
#some code here
if __name__ == '__main__':
app.jinja_env.filters['split_space'] = split_space
app.run()
Et je l'ai utilisé comme tel dans le modèle:
{% if "string" in element|split_space %} ... {% endif %}
L'appel de split sur la chaîne devrait faire l'affaire:
"a 1".split()
ma solution est testée dans iPython
In [1]: from jinja2 import Template
In [2]: Template("{{s.split('-')}}").render(s='a-bad-string')
Out[2]: u"['a', 'bad', 'string']"
Je suggère d'utiliser quelque chose comme:
str = "a 1 b 2 c 3"
val = atr.split()
De plus, si vous souhaitez pointer une position spécifique, vous pouvez utiliser quelque chose comme:
val1 = atr.split()[2]
Cela mettra la deuxième valeur dans val1
.
J'ai fait un petit plugin qui fait la même chose que la réponse de Loïc mais en spécifiant éventuellement un séparateur. https://github.com/timraasveld/ansible-string-split-filter
Il vous permet de taper:
# my_variable = 'a 1`
{ my_variable | split | join(' and ') } #=> a and 1
Vous pouvez également le faire avec un décorateur:
from flask import Flask
app = Flask(__name__)
@app.template_filter('split_space')
def split_space_filter(s):
return s.strip().split()
if __name__ == '__main__':
app.run()