2012-01-11 21 views
7

Có cách nào để nhận nhiều chữ số của một số đã cho trong mẫu django không?số django slice trong mẫu

Ví dụ:

{{ some_num|get_digit:2 }} 

sẽ cung cấp cho bạn đúng thứ hai chữ số nhất. Đối với 1224531 nó sẽ là 3

Có cách nào để lấy 3 chữ số cuối cùng hoặc 5 chữ số đầu tiên không? Giống như cắt của python?

cái gì đó như:

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

tìm kiếm "django mẫu thẻ lát" sẽ đưa bạn đến những câu trả lời! – Stefano

Trả lời

20

Có một sự "lát" mẫu thẻ

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

Nó sử dụng các cú pháp tương tự như danh sách cắt của Python.

Ví dụ:

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

trong python này tương đương với:

some_list[:2] 

BTW dụ thứ 2 của bạn sẽ là "2:5" không "2,5"

NB. Python slicing hoạt động trên bất kỳ chuỗi nào. Các chuỗi và danh sách là các chuỗi. Con số không!

+0

nhưng điều này có nghĩa là tôi phải chuyển đổi số sang danh sách trước? –

+0

@ 9-bit: thẻ slice hoạt động giống như slice của python: một chuỗi có thể lặp lại, vì vậy nó hoạt động hoàn hảo trên chuỗi. Nó không hoạt động trên các con số - nhưng một lần nữa, slice của python cũng không hoạt động trên các con số. – Stefano

+0

không hoạt động trên các giá trị động - tức là nơi chỉ mục của lát cắt đến từ một biến. Trong các mẫu Jinja2 bạn chỉ cần thực hiện {{some_list [: upper_index]}} và nó hoạt động. – Evgeny

1

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

Câu trả lời của Stefano đang đi đúng hướng. Bạn cần một bước xử lý trước để biến số của bạn thành một danh sách và một bước hậu xử lý để hợp nhất danh sách đó thành chuỗi.

0

bất kỳ bộ lọc bổ sung nào chuyển đổi số thành chuỗi trước khi cắt sẽ hoạt động. Tôi sử dụng những phiên bản:

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

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