【问题标题】:Combining constant and variable value for template default value结合模板默认值的常量和变量值
【发布时间】:2012-01-30 15:53:49
【问题描述】:

我正在设置一个模板,我希望默认值是常量字符串和变量 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 过滤器的语法中做到这一点?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你不能。然而,default 只是一个捷径。在这种情况下,快捷方式不起作用,但较长的形式将允许您做您需要的事情:

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

    【讨论】:

      【解决方案2】:

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

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

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

      更新:我很抱歉。经过更彻底的测试,我发现我在这里提出的解决方案实际上并不起作用。我认为“添加”过滤器将应用于默认值,但它最终会应用于表达式的第一部分解析为的任何值。

      所以,如果 {{ instance.image.url }} 有一个值,那么 "img/icons/my-image.svg" 会被连接起来,这会破坏它。

      【讨论】:

      • 谢谢!我不记得当我问这个问题时我使用的是哪个版本的 Django。可能尚未添加 add: 过滤器。
      • 我做了研究。 This commit 使 add: 过滤器能够处理整数以外的东西。这是从 2010 年 2 月开始的,看起来第一个包含 1.2 的 Django 版本。我想我在做比这更早的事情。
      猜你喜欢
      • 2014-10-23
      • 2021-09-23
      • 1970-01-01
      • 2011-08-27
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多