Как в шаблоне 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
Что делает этот код:
{{ post.title|slice:":20" }}
:Фильтр
slice
обрезает строкуpost.title
до первых 20 символов.Если строка короче 20 символов, она останется без изменений.
{% if post.title|length > 20 %}...{% endif %}
:Проверяет, превышает ли длина заголовка 20 символов.
Если да, добавляет многоточие (
...
) в конце.
Пример работы:
Если
post.title = "Это очень длинный заголовок поста"
, результат будет:Это очень длинный за...
Если
post.title = "Короткий заголовок"
, результат будет:Короткий заголовок
Альтернативный вариант (с использованием кастомного фильтра)
Если вам нужно часто обрезать строки, можно создать собственный фильтр в Django. Например:
Создайте файл
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
В шаблоне подключите фильтр и используйте его:
{% 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