Skip to content

Latest commit

 

History

History
131 lines (106 loc) · 5.17 KB

File metadata and controls

131 lines (106 loc) · 5.17 KB

Обновление функции substitute_template_variables

Изменения

1. Новый формат переменных

Было: {field} (одинарные фигурные скобки)
Стало: {{field}} (двойные фигурные скобки)

2. Поддерживаемые поля

Поле Описание Источник данных
{{first}} Имя user.name.first
{{middle}} Отчество user.name.middle
{{name}} Полное имя user.name.first + user.name.middle + user.name.last
{{position}} Должность user.position
{{mail}} Email адрес user.nickname@domain или user.emails[0]
{{telephone}} Рабочий телефон user.phone
{{mobile}} Мобильный телефон user.mobile или из user.phones
{{department}} Отдел user.department

3. Автоматическое скрытие пустых полей

Функция автоматически удаляет HTML элементы, содержащие только пустые переменные:

Удаляемые паттерны:

  • <div>...</div> с пустыми переменными
  • <p>...</p> с пустыми переменными
  • <span>...</span> с пустыми переменными
  • <blockquote>...</blockquote> с пустыми переменными
  • Строки, содержащие только пустые переменные

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

Шаблон:

<div>Имя: {{first}}</div>
<div>Отчество: {{middle}}</div>
<div>Фамилия: {{last}}</div>
<div>Телефон: {{telephone}}</div>
<div>Мобильный: {{mobile}}</div>

Если у пользователя нет отчества и мобильного телефона:

<div>Имя: Иван</div>
<div>Фамилия: Петров</div>
<div>Телефон: +7-123-456-7890</div>

4. Очистка результата

Функция также:

  • Удаляет пустые строки
  • Сохраняет одну пустую строку между блоками контента
  • Удаляет завершающие пустые строки

Примеры использования

Пример 1: Базовый шаблон

<div><strong>{{name}}</strong></div>
<div>Email: {{mail}}</div>
<div>Телефон: {{telephone}}</div>
<div>Мобильный: {{mobile}}</div>
<div>Должность: {{position}}</div>
<div>Отдел: {{department}}</div>

Пример 2: Условное отображение

<div>С уважением,</div>
<div><strong>{{name}}</strong></div>
<div>Email: {{mail}}</div>
<div>Телефон: {{telephone}}</div>
<div>Мобильный: {{mobile}}</div>
<div>Должность: {{position}}</div>
<div>Отдел: {{department}}</div>

Если у пользователя нет мобильного телефона и отдела, результат будет:

<div>С уважением,</div>
<div><strong>Иван Петров</strong></div>
<div>Email: ivan.petrov@company.com</div>
<div>Телефон: +7-123-456-7890</div>
<div>Должность: Менеджер</div>

Пример 3: Сложный HTML

<div style="font-family: Arial;">
    <div><strong>{{name}}</strong></div>
    <div>Email: <a href="mailto:{{mail}}">{{mail}}</a></div>
    <div>Телефон: {{telephone}}</div>
    <div>Мобильный: {{mobile}}</div>
    <div>Должность: {{position}}</div>
    <div>Отдел: {{department}}</div>
</div>

Технические детали

Регулярные выражения для очистки:

patterns_to_remove = [
    r'<div[^>]*>\s*{{[^}]+}}\s*</div>',
    r'<p[^>]*>\s*{{[^}]+}}\s*</p>',
    r'<span[^>]*>\s*{{[^}]+}}\s*</span>',
    r'<blockquote[^>]*>\s*{{[^}]+}}\s*</blockquote>',
    r'^\s*{{[^}]+}}\s*$',
]

Обработка телефонов:

  • {{telephone}} - рабочий телефон из user.phone
  • {{mobile}} - мобильный телефон из user.mobile или поиск в user.phones с типом 'mobile'

Обработка email:

  • Приоритет: user.emails[0] если есть, иначе user.nickname@domain

Обратная совместимость

Старые шаблоны с одинарными фигурными скобками {field} больше не поддерживаются. Необходимо обновить все шаблоны на новый формат {{field}}.

Преимущества нового подхода

  1. Чистый результат - автоматическое удаление пустых полей
  2. Гибкость - поддержка различных типов контактной информации
  3. Читаемость - четкое разделение между полями
  4. Производительность - эффективная обработка с регулярными выражениями