Bunun için özel bir filtre kullanmalısınız. , Şablonunuzdaki Sonra
# negate_filter.py
from django import template
register = template.Library()
@register.filter
def negate(value):
return -value
üstüne kodu {% load negate_filter %}
ekleyebilir ve daha sonra {{ qty|negate }}
ile {{ -qty }}
değiştirin:
1) Bir negate
filtre tanımlayabilirsiniz:
İşte bunu yapmak için iki farklı yol var .
2) Eğer isterseniz, aynı zamanda bir buy_sell
filtreli tüm şey değiştirebilirsiniz:
# buy_sell_filter.py
from django import template
register = template.Library()
@register.filter
def buy_sell(value):
if value > 0 :
return 'sell %s' % value
else :
return 'buy %s' % -value
Sonra şablon sadece
{% if qty %} Please, sell {{ qty|buy_sell }} products.{% endif %}
Hatta tüm dize içerebilir olmalıdır filtrede ve sadece şablonun tamamı {{qty | buy_sell}} olabilir.
Her iki seçenek de şablonunuzun geri kalanına bağlı olarak uygundur. Örneğin, negatif satın almak ve pozitif için satmak çok sayıda dizeleri varsa, ikincisini yapın.
Teşekkürler, aradığım şey bu gibi görünüyor! Özel bir filtre kullanabilirdim (ama Django'nunkileri "kötüye kullanmayı" tercih ederim), ama daha fazla bir şey yapma fikrini beğenmiyorum. Benim düşünceme göre, görünüm zaten mantığı yapıyor, ve metinsel anlamını oluşturmak için şablonun işi (ve belki de her iki durum için farklı HTML kodu istiyorum). Ayrıca, bir sayının işaretini göstermemek sadece hesaplamalar değil, biçimlendirmelerdir. Ama ne yazık ki, 'stringformat ':' u '' bunu kullanamayız. – alexpirine