2012-01-11 20 views
7

C'è un modo per ottenere più cifre di un determinato numero all'interno di un modello django?numeri di django slice nel modello

Ad esempio:

{{ some_num|get_digit:2 }} 

vi darà la seconda cifra più a destra. Per 1224531 sarebbe 3

C'è un modo per ottenere le ultime 3 cifre o le prime 5 cifre? Come l'affettare di pitone?

qualcosa di simile:

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

ricerca di "Django modello fetta tag" ti avrei portato la risposta! – Stefano

risposta

20

C'è un tag il modello "fetta"

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

Esso utilizza la stessa sintassi di lista affettare di Python.

Esempio:

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

in Python questo è equivalente a:

some_list[:2] 

BTW tuo secondo esempio potrebbe essere "2:5" non "2,5"

NB. L'affettatura Python funziona su qualsiasi 'sequenza'. Le stringhe e le liste sono sequenze. I numeri non lo sono!

+0

ma questo significa che dovrei prima convertire il numero in una lista? –

+0

@ 9-bit: il tag slice funziona come la slice di python: una stringa è iterabile, quindi funziona perfettamente sulla stringa. Non funziona sui numeri - ma ancora una volta, la slice di Python non funziona nemmeno sui numeri. – Stefano

+0

non funziona su valori dinamici, ad esempio laddove l'indice di slicing proviene da una variabile. Nei modelli Jinja2 fai solo {{some_list [: upper_index]}} e funziona. – Evgeny

1

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

risposta di Stefano è sulla strada giusta. È necessario un passaggio di pre-elaborazione per trasformare il numero in un elenco e una fase di post-elaborazione per unire nuovamente l'elenco in stringa.

0

qualsiasi filtro aggiuntivo che converta il numero in una stringa prima che il taglio funzioni. Ho usato queste varianti:

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

e

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