Метод words
Метод words применяется к экземпляру класса Truncator и возвращает строку, обрезанную до указанного количества слов. Метод добавляет многоточие (три точки) в конце обрезанной строки, чтобы указать на то, что текст был сокращен. Обрезка происходит по границам слов, что делает результат более читаемым по сравнению с обрезкой по символам. Метод принимает обязательный аргумент num - количество слов, которое нужно оставить.
Синтаксис
from django.utils.text import Truncator
truncator = Truncator(text)
result = truncator.words(num)
Параметры
Метод words принимает следующие параметры:
⁅b⁆num⁅/b⁆ - обязательное целочисленное значение, определяющее количество слов, которое должно остаться в итоговой строке. Если указанное число больше фактического количества слов в исходном тексте, метод вернет исходную строку без изменений.
Пример . С обрезкой текста до 3 слов
Создадим усекатель текста и обрежем строку до трех слов:
from django.utils.text import Truncator
text = "Это длинное предложение с множеством слов для примера"
truncator = Truncator(text)
res = truncator.words(3)
print(res)
Результат выполнения кода:
"Это длинное предложение..."
Пример . С текстом короче указанного количества слов
Если количество слов в исходном тексте меньше указанного значения, метод вернет полный текст без обрезки:
from django.utils.text import Truncator
text = "Короткий текст"
truncator = Truncator(text)
res = truncator.words(10)
print(res)
Результат выполнения кода:
"Короткий текст"
Пример . С текстом, содержащим знаки препинания
Метод words корректно обрабатывает знаки препинания и HTML-теги, обрезая текст по словам:
from django.utils.text import Truncator
text = "<p>Привет, мир! Как у тебя дела, друг?</p>"
truncator = Truncator(text)
res = truncator.words(4)
print(res)
Результат выполнения кода:
"<p>Привет, мир! Как у тебя дела...</p>"
Пример . С использованием в модели
Метод часто используется в моделях для создания краткого описания или анонса записи:
from django.db import models
from django.utils.text import Truncator
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
def short_content(self):
return Truncator(self.content).words(20)
Теперь при вызове метода short_content для экземпляра модели будет возвращаться обрезанная версия содержимого:
from myapp.models import Article
article = Article.objects.get(id=1)
res = article.short_content()
print(res)