我想总是在 Django 模板中使用我的变量的正值。变量的符号只是文字含义:
{% if qty > 0 %}
Please, sell {{ qty }} products.
{% elif qty < 0 %}
Please, buy {{ -qty }} products.
{% endif %}
当然,{{ -qty }}
行不通。
是否有不传递包含绝对值的第二个变量的解决方法?类似于将值转换为无符号整数的模板过滤器。
谢谢!
我想总是在 Django 模板中使用我的变量的正值。变量的符号只是文字含义:
{% if qty > 0 %}
Please, sell {{ qty }} products.
{% elif qty < 0 %}
Please, buy {{ -qty }} products.
{% endif %}
当然,{{ -qty }}
行不通。
是否有不传递包含绝对值的第二个变量的解决方法?类似于将值转换为无符号整数的模板过滤器。
谢谢!
您可以滥用一些字符串过滤器:
{% if qty > 0 %}
Please, sell {{ qty }} products.
{% elif qty < 0 %}
Please, buy {{ qty|slice:"1:" }} products.
{% endif %}
或者
Please, sell {{ qty|stringformat:"+d"|slice:"1:" }} products.
但是您可能应该在您的视图中执行此操作或编写自定义过滤器。
您应该为此使用自定义过滤器。
这是两种不同的方法:
1)您可以定义一个negate
过滤器:
# negate_filter.py
from django import template
register = template.Library()
@register.filter
def negate(value):
return -value
然后在您的模板中,将代码添加{% load negate_filter %}
到顶部,然后替换{{ -qty }}
为{{ qty|negate }}
.
buy_sell
2)如果你愿意,你也可以用一个过滤器替换整个东西:
# 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
那么你的模板应该只是
{% if qty %} Please, sell {{ qty|buy_sell }} products.{% endif %}
您甚至可以在过滤器中包含整个字符串,然后将整个模板设为 {{ qty|buy_sell }}。
这两个选项都是合理的,具体取决于模板的其余部分。例如,如果您有很多使用负数买入和正数卖出的字符串,请执行第二个。