Django模板“with”标签调用一个变量

时间:2014-02-11 08:29:43

标签: python django

有一个Django模板,我想使用instance.links[0]['href'].split(':')[1]作为变量,并使用with标记来调用它:

{% if instance %}
{% with "http:{{ instance.links[0]['href'].split(':')[1] }}/dashboard/speed?speed=" as url%}
{% endwith %}
{% endif %}

这是instance

def set_network_speed(instance):

    template_name = 'project/instances/set_network_speed.html'
    context = {"instance": instance}
    return template.loader.render_to_string(template_name, context)

上面的代码错了。有人可以帮我解决吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

没有。你不能在模板中这样做。即使您使用了其余的语法,也无法将参数传递给split

您需要编写自定义模板标记或过滤器。

答案 1 :(得分:1)

最好的方法是在实例对象类上添加一个空的args方法。

class InstanceClass(AnyThing):
    def get_url(self):
        return "http://" + instance.links[0]['href'].split(':')[1] + "/dashboard/speed?speed="

然后你可以在模板中使用它

{% if instance %}
{% with instance_url=instance.get_url %}
{% endwith %}
{% endif %}

编辑:Thanx评论Quentin Pradet。修复也可以在问题中实现。

即使它在模板中肯定不会发生冲突,我也不会使用现有的命令名作为var名称来避免混淆。