Как в шаблоне Django обрезать переменную до нужной длины и добавить многоточие

В шаблоне страницы, последние записи выводятся вот так

{% for post in posts %}
    <li>
        <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
    </li>
{% endfor %}

Потребовалось их обрезать до нужной длинны

Чтобы обрезать заголовоки последних записей (post.title) до 20 символов и добавить многоточие (...), можно использовать фильтр slice в Django-шаблоне. 

Вот как это сделать:

{% for post in posts %}
    <li>
        <a href="{{ post.get_absolute_url }}">
            {{ post.title|slice:":20" }}{% if post.title|length > 20 %}...{% endif %}
        </a>
    </li>
{% endfor %}

Run HTML

Что делает этот код:

  1. {{ post.title|slice:":20" }}:

    • Фильтр slice обрезает строку post.title до первых 20 символов.

    • Если строка короче 20 символов, она останется без изменений.

  2. {% if post.title|length > 20 %}...{% endif %}:

    • Проверяет, превышает ли длина заголовка 20 символов.

    • Если да, добавляет многоточие (...) в конце.


Пример работы:

  • Если post.title = "Это очень длинный заголовок поста", результат будет:

    Это очень длинный за...
  • Если post.title = "Короткий заголовок", результат будет:

    Короткий заголовок

Альтернативный вариант (с использованием кастомного фильтра)

Если вам нужно часто обрезать строки, можно создать собственный фильтр в Django. Например:

  1. Создайте файл templatetags/custom_filters.py в вашем приложении:

    from django import template
    
    register = template.Library()
    
    @register.filter
    def truncate_chars(value, max_length):
        if len(value) > max_length:
            return value[:max_length] + '...'
        return value
  2. В шаблоне подключите фильтр и используйте его:

    {% load custom_filters %}
    
    {% for post in posts %}
        <li>
            <a href="{{ post.get_absolute_url }}">
                {{ post.title|truncate_chars:20 }}
            </a>
        </li>
    {% endfor %}

    Run HTML

Этот подход более гибкий и позволяет легко изменять логику обрезки строк.


Итог

Первый вариант (с использованием slice и условия) подходит для простых случаев. Если нужно больше контроля или повторного использования, лучше создать кастомный фильтр. 😊

Категория: Программирование | автор: fominyh_vv

Опубликовано: 21-03-2025 16:30