2011-12-09 24 views

Trả lời

46

Không có. Nhưng nếu bạn là một hacker chút ....

http://slacy.com/blog/2010/07/using-djangos-widthratio-template-tag-for-multiplication-division/

để tính toán A * B: {% widthratio A 1 B%}

để tính A/B: {% widthratio AB 1%}

để tính A^2: {% widthratio A 1 A%}

để tính toán (A + B)^2: {% widthratio A | thêm: B 1 A | thêm: B% }

để tính toán (A + B) * (C + D): {% widthratio A | thêm: B 1 C | thêm: D%}

Ngoài ra bạn có thể tạo một bộ lọc để phân chia trong vòng 2 phút

+2

Đó là việc sử dụng thú vị của thẻ widthratio, nhưng nó chắc chắn có thể rời khỏi một ai đó gãi đầu của họ cố gắng tìm ra những gì nó làm, imo. – Brandon

+0

Cảm ơn. Nhưng điều này cho 'Caught TypeError trong khi rendering: float() đối số phải là một chuỗi hoặc một số' lỗi cho một số số – Sam

+1

Boo liên kết bị hỏng –

16

sử dụng một bộ lọc tùy chỉnh:

register = template.Library() 

@register.filter 
def divide(value, arg): 
    try: 
     return int(value)/int(arg) 
    except (ValueError, ZeroDivisionError): 
     return None 
+0

Bạn nên quản lý trường hợp số nổi, nó có thể hữu ích một thời gian :-) –

+1

Nó có thể chia cho số không, vì vậy tôi sẽ đề nghị: 'def divide (value, arg): return (int (value)/int (arg)) nếu int (arg)! = 0 else 0 ' – jobima

4

tôi sẽ sử dụng một mẫu tùy chỉnh, nhưng nếu bạn không muốn để bạn có thể sử dụng widthratio xây dựng trong thẻ,

{% widthratio request.session.get_expiry_age 3600 1 %} 

e khác xample

{% widthratio value 1150000 100 %} 

Cú pháp:

{% widthratio parm1 parm2 parm3 %} 

Vì vậy, về cơ bản nó được sử dụng để mở rộng hình ảnh, nhưng bạn có thể sử dụng nó cho phép chia. Những gì nó làm là: parm1/parm2 * parm3.

Hy vọng điều này sẽ giúp, nhiều hơn về widthratio here.

0

Có một mô-đun Python để thực hiện các phép toán trong các mẫu của bạn: Django-Mathfilters.

Nó chứa add như bạn nói, mà còn div chia:

8/3 = {{ 8|div:3 }} 
Các vấn đề liên quan