如果file.url
以.ai
结尾,我需要渲染图像 adobe_illustrator_file_logo.png 。
但是如果file.url
以.png
之类的其他终止结尾,例如,我将渲染对象的图像。
我正在搜索文档,但显然没有内置的endswith
过滤器。
所以我最终使用了ifequals
和slice
过滤器。
逻辑上是相同的:“ 如果字符串与最后三个字母相同,则这样做”。
但是,它不起作用,因为什么也没有显示。
<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 %}
答案 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 %}