有一个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)
上面的代码错了。有人可以帮我解决吗?非常感谢!
答案 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名称来避免混淆。