2012-01-11 30 views
7

bir Django şablonunda içinde belirli sayıda çoklu basamak almanın bir yolu var mı? ÖrneğinDjango dilim numaraları

:

{{ some_num|get_digit:2 }} 

size sağdan ikinci en rakamı verecektir. 1224531 için bu 3

Son 3 rakamını ya da ilk 5 hanesini almanın bir yolu var mı olurdu? Python'un dilimlemesi gibi mi? gibi

şey:

{{ some_num|get_digits:2,5}} 
+1

yanıtına getirdi olurdu! – Stefano

cevap

20

O Python'un liste dilimleme ile aynı sözdizimini kullanan bir "dilim" şablon etiketi

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#slice

yoktur.

Örnek: Bu eşdeğerdir Python

{{ some_list|slice:":2" }} 

:

some_list[:2] 

BTW senin 2 örnek "2:5" değil "2,5"

NB olurdu. Python dilimleme herhangi bir 'dizisi' üzerinde çalışır. Dizeler ve listeler dizilerdir. Sayılar değil!

+0

fakat bu sayıyı önce bir listeye çevirmek zorunda mıyım? 9-bit @ –

+0

: dilim etiketi Python en dilim gibi çalışır: bir dize iterable, bu nedenle ipte mükemmel çalışıyor. Sayılarla çalışmaz - ama yine de, python'un dilimi sayılarla da çalışmaz. – Stefano

+0

dinamik değerler üzerinde çalışmaz - yani dilimleme indeksi bir değişkenden gelir. Jinja2 şablonda sadece do {{some_list [: upper_index]}} ve çalışıyor. – Evgeny

1

{{1234567|make_list|slice:'2:5'|join:''}}

Stefano'nın cevabı doğru yolda. Numaranızı bir listeye döndürmek için bir ön işlem adımına ve bu listeyi tekrar string'e birleştirmek için bir işlem sonrası adımına ihtiyacınız vardır.

0

dilimleme çalışacak önce bir dizeye numarayı çevirir herhangi bir ekstra filtre. Bunları varyantları kullandı:

{{ some_num|slugify|slice:"2:5" }} 

ve "Django şablon etiket dilim" araması

{{ some_num|stringformat:"d"|slice:"5:10" }}