2010-01-14 19 views
22

Sadece varolan bir listeyle döngü yapmak ve bunun dışında bir virgülle ayrılmış dizge yapmak istiyorum. Böyle
şey: my_string = 'stuff, stuff, stuff, stuff'Jinja'da dize birleştirme

Ben zaten biliyor loop.last, sadece İŞ altında benim kodunda üçüncü satırını nasıl bilmek gerekir. stuffs dizeleri bir liste ise

{% set my_string = '' %} 
{% for stuff in stuffs %} 
{% set my_string = my_string + stuff + ', '%} 
{% endfor%} 
+0

Tamam orijinal kod ı eserler yayınlanmıştır, ben de {{}} içinde olduğunu benim gerçek kodum yerine {%%} arama yapmak ve onu araştırmak için en iyi yolu ve bunu yapmak için bana uygun olan şeyleri aradım ve bu, günün sonunda geceye, yani {{} } benim hayal kırıklığı içinde kaymış. Cevabınız için teşekkür ederiz. – KacieHouser

cevap

42

, sadece bu işe yarar:

{{ stuffs|join(", ") }} 

Link belgelerine.

+0

nice one - bunu dokümanlar bölümünde bulamadım. – doug

+6

un yerine ~ yerine [buradaki gibi] kullanmayı unutmayın (http://jinja.pocoo.org/docs/templates/#other-operators) – Josmar

3

Benim hatam, sadeleştirmeye çalışırken, çok fazla gittim, aslında stuffs her türlü bilginin bir kaydı, sadece kimliğini istiyorum.

stuffs = [[123, first, last], [456, first, last]] 

My orijinal kod aşağıdaki gibi görünüyordu gerekirdi

my_sting = '123, 456' 

olmak my_sting istiyorum:

{% set my_string = '' %} 
{% for stuff in stuffs %} 
{% set my_string = my_string + stuff.id + ', '%} 
{% endfor%} 

düşünüyorum da stuffs muhtemelen bir sözlük olmakla birlikte, özü olsun .

{% set my_string = [] %} 
{% for stuff in stuffs %} 
{% do my_string.append(stuff.id) %} 
{% endfor%} 
{% my_string|join(', ') %} 

Ama bunu yapmak için uzantıları ithal ve bu belgeleri okumadan çalışmıyor ekleme bana bir baş ağrısı verdi:

Evet join filtreyi bulundu ve böyle yaklaşım gidiyordu . İçe aktarma ifadesini nereye koyduğunuzu veya nereye koyacağınızı açıkça belirtmez, bu yüzden iki kötülüğün daha azı olan bir konsatte bulunmanın bir yolunu bulmayı düşündüm.

+3

2.6'dan itibaren birleştirme filtresinde bir öznitelik seçebilirsiniz. Yani {{stuffs.join (',', attribute = 'id')}} yapabilirsin, bkz. Http://jinja.pocoo.org/docs/templates/#join – dmertl

0

Sadece başka bir kesmek böyle olabilir.

Birleştirmem gereken dizeler dizim var. Bu yüzden bu diziyi sözlüğe ekledim ve daha sonra işe yarayan döngü için kullandım.

{% set dict1 = {'e':''} %} 
{% for i in list1 %} 
{% if dict1.update({'e':dict1.e+":"+i+"/"+i}) %} {% endif %} 
{% endfor %} 
{% set layer_string = dict1['e'] %} 
0

sadece katılmak filtre kullanın ama dizinin girişinde bazı işlemleri gerçekleştirmek için ihtiyaç yapamıyorsanız:

{% for entry in array %} 
User {{ entry.attribute1 }} has id {{ entry.attribute2 }} 
{% if not loop.last %}, {% endif %} 
{% endfor %} 
İlgili konular