Джанго: как построить фильтр с фильтром - PullRequest
0 голосов
/ 29 января 2019

Мне нужно отрендерить изображение adobe_illustrator_file_logo.png , если file.url заканчивается .ai.

Но если file.url заканчивается другим завершением, например, .png для exmaple, я буду отображать изображение объекта.

Я ищу документацию, но, видимо, нет 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 правильно отображает, если он помещен за пределы, если условие.

Обновление 1:

Создан мой собственный фильтр, но ошибка получения:

TemplateSyntaxError at / cart /
заканчивается 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)

Template

{% 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...