将常量和变量值组合为模板默认值

时间:2011-12-30 15:51:26

标签: django django-templates

我正在设置一个模板,我希望默认值是常量字符串和变量id值的组合。所需的HTML输出类似于:

<span id="id1234" class="foo">
   Click <a href="/images/img1234.jpg">here to view image</a>.
</span>

span的模板代码中,我想要像:

<span id="{{ spanid|default:'id'object.id }}" class="foo">

同样,a标记将使用:

<a href="/images/{{ image_file|default:'img'object.id'.jpg'"> here to view...

这不起作用,有没有办法在django模板和default过滤器的语法中执行此操作?

2 个答案:

答案 0 :(得分:4)

你做不到。但是,default仅仅是一种捷径。在这种情况下,快捷方式不起作用,但较长的表单将允许您执行所需操作:

{% if image_file %}{{ image_file }}{% else %}img{{ object.id }}.jpg{% endif %}

答案 1 :(得分:1)

@Chris Pratt的答案是一个不错的解决方法,但是使用默认过滤器无法实现这一点是不准确的。

在我的项目中,我只是使用“添加”过滤器将字符串连接到变量值,如下所示:

{{ instance.image.url|default:STATIC_URL|add:"img/icons/my-image.svg" }}

更新:很抱歉。经过更全面的测试,我发现此处介绍的解决方案实际上无效。我以为“添加”过滤器将应用于默认值,但最终将其应用于表达式的第一部分解析为的任何值。

因此,如果{{ instance.image.url }}处有一个值,则“ img / icons / my-image.svg”会被串联起来,这会破坏它。