Django - 来自模板标签内变量的字符串

时间:2016-11-05 17:00:50

标签: python django django-templates django-template-filters

我无法弄清楚如何将多个参数发送到自定义模板过滤器。

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

自定义模板过滤器

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

你有什么想法吗?

1 个答案:

答案 0 :(得分:4)

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

如果dayhour是字符串,则在连接字符串之前需要将字符串转换为字符串:

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