2016-11-05 104 views
2

我无法弄清楚如何将多个参数发送到自定义模板过滤器中。Django - 模板标签中变量的字符串

问题是我使用模板变量作为参数。

自定义模板过滤器

@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 %} 

但是这引起了:

异常值:无效字面对于int()与底座10: '{{天}}'

你有什么想法吗?

回答

3

当您在{% %}中时,您不需要{{}}。只需在该标记中直接使用名称,并使用字符串concat模板语法add即可。

如果dayhour是字符串,类型转换为字符串将concating琴弦之前,需要:

{% 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 %} 
+0

不幸的是,这是行不通的。我不知道为什么。大概一天一小时都是整数。它返回:异常值:\t 'int'对象没有属性'split',如果我打印dayhour变量,它会打印0而不是“0,2”。 –

+0

我更新了包含类型转换的答案 –

+0

似乎是一种很好的方法,但存在一些问题,可能是语法。 u'with'收到一个无效的标记:u'hour | stringformat:'s''我试图弄清楚错误的重点。 –