При разработке на Django работа со строками происходит очень часто. Необходимо обрабатывать пользовательский ввод, генерировать URL и создавать текстовые резюме. django.utils.text - это модуль, который объединяет мощные и удобные утилиты для повседневной работы с текстом.🧰
В этом посте мы рассмотрим наиболее полезные и часто используемые ключевые функции модуля django.utils.text.
1. Идеальный конвертер для URL: slugify
Это, безусловно, самая известная функция, которая служит причиной существования этого модуля. Слаг (slug) - это упрощенная версия заголовка или строки, которая используется в основном как часть URL.
slugify преобразует строку следующим образом:
- преобразует в нижний регистр.
- заменяет специальные символы (включая пробелы) на дефисы (
-). - удаляет символы, не являющиеся буквами, цифрами, дефисами или подчеркиваниями (_).
Пример:
from django.utils.text import slugify
title = "Django 5.0 Release! What's new?"
slug = slugify(title)
print(slug)
# Результат: 'django-50-release-whats-new'
# Теперь это значение можно использовать в URL как /blog/django-50-release-whats-new/.
<Важно> Поддержка языков CJK (китайский, японский, корейский) и Unicode: По умолчанию
slugifyоставляет только ASCII символы. Чтобы включить символы Unicode CJK языков в слаг, необходимо использовать опциюallow_unicode=True.
title_ko = "장고 유틸리티 총정리"
# По умолчанию (корейский исчезает)
print(slugify(title_ko))
# Результат: '' (пустая строка)
# Разрешение Unicode
print(slugify(title_ko, allow_unicode=True))
# Результат: '장고-유틸리티-총정리'
2. Создание безопасного имени файла: get_valid_filename
Сохранять название файлов, загруженных пользователями, на сервере очень рискованно. В имени файла могут быть символы, такие как ../ (для обхода путей) или специальные символы, недопустимые в Windows (:, *, ?).
get_valid_filename гарантирует, что такие опасные символы или системные зарезервированные слова будут заменены на безопасные символы (обычно на подчеркивание _), и возвращает только допустимые имена файлов.
Пример:
from django.utils.text import get_valid_filename
# Имя файла, загруженное пользователем злонамеренно
user_filename = "../../secrets/pa$$word.txt"
safe_name = get_valid_filename(user_filename)
print(safe_name)
# Результат: '.._.._secrets_pa__word.txt'
# Зарезервированные системой символы
windows_filename = "CON:MyFile.pdf"
safe_name_2 = get_valid_filename(windows_filename)
print(safe_name_2)
# Результат: '_CON_MyFile.pdf'
3. Создание аккуратного резюме: truncatechars / truncatewords
Эта функция часто используется, когда нужно предварительно показать длинный текст на странице списка блогов. Она известна также как фильтр шаблона Django (|truncatechars:50), но ее можно использовать и прямо в коде Python.
truncatechars(text, length): обрезает строку по количеству символов (length, включая пробелы) и, если обрезано, добавляет...(по умолчанию).truncatewords(text, num): обрезает строку по количеству слов (num) и, если обрезано, добавляет....
Пример:
from django.utils.text import truncatechars, truncatewords
long_text = "Django is a high-level Python web framework that encourages rapid development."
# 1. По количеству символов (20 символов)
summary_chars = truncatechars(long_text, 20)
print(summary_chars)
# Результат: 'Django is a high-le...'
# 2. По количеству слов (5 слов)
summary_words = truncatewords(long_text, 5)
print(summary_words)
# Результат: 'Django is a high-level Python...'
4. Первая буква заглавная: capfirst
Простая, но неожиданно часто используемая утилита. Преобразует первую букву строки в заглавную. Полезно для форматирования, например, отображая verbose_name модели в шаблоне.
Пример:
from django.utils.text import capfirst
label = "user name"
formatted_label = capfirst(label)
print(formatted_label)
# Результат: 'User name'
5. Преобразование в естественный список: get_text_list
Преобразует список Python (list) в читаемое людьми предложение. Перед последним элементом добавляется "and" (или другое соединительное слово).
Пример:
from django.utils.text import get_text_list
# Когда есть несколько элементов (по умолчанию: 'and')
items_1 = ['Apple', 'Banana', 'Cherry']
print(get_text_list(items_1))
# Результат: 'Apple, Banana and Cherry'
# Изменение соединительного слова (например: 'or')
items_2 = ['Email', 'SMS']
print(get_text_list(items_2, 'or'))
# Результат: 'Email or SMS'
# Когда один элемент
items_3 = ['Django']
print(get_text_list(items_3))
# Результат: 'Django'
Итог
Модуль django.utils.text решает почти все "мелкие" проблемы, связанные с работой с текстом в разработке Django. Используя этот модуль, вы можете сделать код более чистым и предотвратить потенциальные проблемы с безопасностью, которые могут возникнуть при работе с URL или именами файлов.
В частности, slugify и get_valid_filename могут быть названы необходимыми утилитами для проектов Django.
Комментариев нет.