如果file.url
以.ai
结尾,我需要渲染图像adobe_illustrator_file_logo.png。
但是如果file.url
以其他终止方式结束,例如.png
,我将渲染对象的图像。
我已经搜索了文档,但显然没有内置的endswith
过滤器。
所以我最后玩的是ifequals
和slice
滤镜。
逻辑是一样的:“* 如果字符串与最后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 %}
1条答案
按热度按时间00jrzges1#
你不需要一个自定义的过滤器,你几乎已经有了它,你的
|slice:"-3"
在python中做了一个[:-3]
切片,但是你想要一个[-3:]
切片,所以,再明确一点:虽然严格地说它不是一个真实的的
endswith
,但是工作得相当好,不需要向您的项目添加另一个模板过滤器。