我无法弄清楚如何将多个参数发送到自定义模板过滤器。
问题是我使用模板变量作为参数。
自定义模板过滤器
@register.filter
def is_scheduled(product_id,dayhour):
day,hour = dayhour.split(',')
return Product.objects.get(id=product_id).is_scheduled(day,hour)
正常使用
{% if product.id|is_scheduled:"7,22" %}...{% endif %}
上面的行可以正常工作,就像我把两个参数--7和22放入过滤器(测试 - 工作)。问题是我想把变量而不是纯文本/字符串作为参数。
在我的模板中:
{% with day=forloop.counter|add:"-2" hour=forloop.parentloop.counter|add:"-2" %}
现在,我想使用{{ day }}
和{{ hour }}
作为参数。
我试过例如:
{% if product.id|is_scheduled:"{{ day }},{{ hour }}" %}...{% endif %}
但这提出了:
异常值:基数为10的int()的文字无效:' {{day}}'
你有什么想法吗?
答案 0 :(得分:4)
当您在{{}}
内时,您不需要{% %}
。只需在该标记中直接使用名称,并使用字符串concat模板语法add
。
如果day
和hour
是字符串,则在连接字符串之前需要将字符串转换为字符串:
{% with day|stringformat:"s" as sday hour|stringformat:"s" as shour %}
{% with sday|add:","|add:shour as arg %}
{% if product.id|is_scheduled:arg %}...{% endif %}
{% endwith %}
{% endwith %}