首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何构建带有端点的过滤器

Django:如何构建带有端点的过滤器
EN

Stack Overflow用户
提问于 2019-01-29 19:51:33
回答 1查看 2.6K关注 0票数 2

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

但是,如果file.url以其他终端结束,比如.png作为示例,我将呈现对象的图像。

我已经搜索了文档,但显然没有内置过滤器的endswith

所以我最后玩了ifequalsslice过滤器。

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

但是,它不起作用,因为什么都不显示。

代码语言:javascript
复制
<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>

注:

代码语言:javascript
复制
<p>{{ cart_item.file.url  }}</p>

HTML呈现

代码语言:javascript
复制
<p>/media/files/working_precisely.ai</p>

此外,如果adobe_illustrator_file_logo.png被放置在if条件的外部,则它将正确呈现。

更新1:

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

TemplateSyntaxError at /cart/

代码语言:javascript
复制
 _**endswith requires 2 arguments, 1 provided**_
代码语言:javascript
复制
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)

模板

代码语言:javascript
复制
{% 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 %}
EN

回答 1

Stack Overflow用户

发布于 2021-02-11 10:52:30

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

代码语言:javascript
复制
{% if object.image.url.lower|slice:"-3:" == "gif" %}
  # note the "-3:"
  # sidenote: arbitry code snippet from my current project...
{% endif %}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54428668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档