Django:如何构建一个endswith过滤器

c2e8gylq  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(199)

如果file.url.ai结尾,我需要渲染图像adobe_illustrator_file_logo.png
但是如果file.url以其他终止方式结束,例如.png,我将渲染对象的图像。
我已经搜索了文档,但显然没有内置的endswith过滤器。
所以我最后玩的是ifequalsslice滤镜。
逻辑是一样的:“* 如果字符串与最后3个字母相同,则执行此操作 *"。
但是,它不起作用,因为没有显示任何内容。

<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置于if条件之外,则会正确呈现。

更新1:

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

***模板语法错误位于/cart/

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 %}
00jrzges

00jrzges1#

你不需要一个自定义的过滤器,你几乎已经有了它,你的|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 %}

虽然严格地说它不是一个真实的的endswith,但是工作得相当好,不需要向您的项目添加另一个模板过滤器。

相关问题