Django:如何构建带有过滤器的结尾

时间:2019-01-29 19:51:33

标签: python django jinja2

如果file.url.ai结尾,我需要渲染图像 adobe_illustrator_file_logo.png

但是如果file.url.png之类的其他终止结尾,例如,我将渲染对象的图像。

我正在搜索文档,但显然没有内置的endswith过滤器。

所以我最终使用了ifequalsslice过滤器。

逻辑上是相同的:“ 如果字符串与最后三个字母相同,则这样做”。

但是,它不起作用,因为什么也没有显示。

<td>
   {% ifequal cart_item.file.url|default:""|slice:"-3" ".ai" %}

        <img src="{% static 'img/admin/adobe_illustrator_file_logo.png' %}"
                   alt=""
                   class="float-left rounded custom_image">
   {% endifequal %}
 </td>

注意:

<p>{{ cart_item.file.url  }}</p>

HTML渲染

<p>/media/files/working_precisely.ai</p>

此外,如果将 adobe_illustrator_file_logo.png 置于条件外,则可以正确呈现。

更新1:

创建了我自己的过滤器,但出现错误:

/ part /
中的

TemplateSyntaxError     endswith需要2个参数,提供1个参数

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter(is_safe=False)
@stringfilter
def endswith(value, suffix):
    return value.endswith(suffix)

模板

{% if cart_item.file.url|endswith: ".ai" %}

       <img src="{% static 'img/admin/adobe_illustrator_file_logo.png' %}"
                alt=""
                class="float-left rounded custom_image">
{% endif %}

1 个答案:

答案 0 :(得分:0)

您不需要(另一个)自定义过滤器,您几乎已经拥有了。您的 |slice:"-3" 在 python 中做了一个 [:-3] 切片,但您想要一个 [-3:] 切片。所以,稍微明确一点:

{% if object.image.url.lower|slice:"-3:" == "gif" %}
  # note the "-3:"
  # sidenote: arbitry code snippet from my current project...
{% endif %}