Шаблоны документов
В учётной записи абонента есть вкладка “Шаблоны документов”. Там можно управлять списком шаблонов для всех абонентов. Кроме классических операций CRUD можно посмотреть историю изменений шаблона, и получить сформированных для абонента документ, кликнув по ссылке с именем файла шаблона.
Форматирование
Заголовок раздела «Форматирование»Чтоб подставить в документ значения из учётной записи абонента, используйте двойные фигурные скобки с пробелом. Например, переменная var:
{{ var }}
Пример текста шаблона документа:
Заголовок.Имя: {{ fio }}платёжный код: {{ username }}Телефон: {{ p_tel }}И остальное: {{ description }}
Серийный номер оконечного оборудования абонента: {{ device.serial }}Мак адрес оконечного оборудования абонента: {{ device.mac }}Оформите так документ в формате docx, загрузите в реестр шаблонов в системе. И можете скачивать отформатированные версии для каждого абонента. Сформированный документ из примера выше будет выглядеть, например, так:
Заголовок.Имя: Иванов Иван Ивановичплатёжный код: 123456Телефон: +71231234567И остальное: Длинное описание в учётной записи абонента
Серийный номер оконечного оборудования абонента: ZTEGC094B3A5Мак адрес оконечного оборудования абонента: 00:d4:9e:68:a5:01Доступные переменные
Заголовок раздела «Доступные переменные»Пример всех данных, доступных для использования:
context { "balance": "0.00", "birth_day": "2000-01-01", "contract": { "contract_number": "141230", "customer": 5774, "end_service_time": null, "extended_data": null, "id": 1567, "is_active": true, "note": null, "start_service_time": "2020-02-14 21:00:00", "title": "Договор на оказание услуг связи" }, "create_date": "2025-05-05", "description": "тестовая анкета", "device": { "address": "стр Россия, Респ, р-н Тестовый, г. Город ул Улица д 1", "create_time": "2016-12-31 21:00:00", "dev_port": null, "dev_type": "Zte ONU F660 V2", "ip_address": null, "mac": "45:47:c0:46:3e:da", "serial": "ZTEGC0463EDA", "title": "Больничная 3" }, "fio": "г-н. Тестовый Человек", "p_address": "стр Россия, Респ, р-н Тестовый, г. Город ул Улица д 1", "p_tel": "+71231234567", "passport": { "customer": 12345, "date_of_acceptance": "2025-07-03", "distributor": "ФФМС", "division_code": "123-123", "id": 10487, "number": "123123", "passport_type": "ru", "registration_address": 13582, "registration_address_title": "стр Россия, Респ, р-н Тестовый, г. Город ул Улица д 1", "series": "1234" }, "now": "2025-07-17 13:45:37.898754", "username": "444418"}Вложенные переменные
Заголовок раздела «Вложенные переменные»можно использовать через точку, например, номер паспорта будет выглядеть так:
{{ passport.number }}Условия
Заголовок раздела «Условия»Когда какая-то переменная может быть пустой, может быть удобно отображать разные блоки информации в зависимости от наличия значений в этих переменных. Тогда можно использовать условия в формате Jinja2.
Например, указывать информацию о паспорте абонента только если он заключил договор, иначе писать, что не заключил:
{% if contract and contract.is_active and passport %} Номер паспорта: {{ passport.number }}{% else %} Абонент ещё не заключил договор{% endif %}Или, если договор уже завершён:
{% if not contract.is_active %} Завершённый договор{% endif %}Дата и время
Заголовок раздела «Дата и время»Переменная now отображает текущее время. Её можно форматировать с помощью метода strftime из python. Например так: {{ now.strftime('%Y-%m-%d') }}, что преобразуется в дату в виде: 2025-01-01.
Коды:
| Директива | Описание | Пример |
|---|---|---|
| %a | День недели - сокращенное название региона. | Sun, Mon, …, Sat (en_US); So, Mo, …, Sa (de_DE) |
| %A | День недели в качестве полного названия региона. | Sunday, Monday, …, Saturday (en_US); Sonntag, Montag, …, Samstag (de_DE) |
| %w | День недели - десятичное число, где 0 - воскресенье, а 6 - суббота. | 0, 1, …, 6 |
| %d | День месяца в виде десятичного числа, дополненного нулем. | 01, 02, …, 31 |
| %b | Месяц - сокращенное название региона. | Jan, Feb, …, Dec (en_US); Jan, Feb, …, Dez (de_DE) |
| %B | Месяц в качестве полного названия региона. | January, February, …, December (en_US); Januar, Februar, …, Dezember (de_DE) |
| %m | Месяц в виде десятичного числа, дополненного нулем. | 01, 02, …, 12 |
| %y | Год без столетия в виде десятичного числа, дополненного нулем. | 00, 01, …, 99 |
| %Y | Год с веком в качестве десятичного числа. | 0001, 0002, …, 2013, 2014, …, 9998, 9999 |
| %H | Час (24-часовые часы) в виде десятичного числа, дополненного нулем. | 00, 01, …, 23 |
| %I | Час (12-часовые часы) в виде десятичного числа, дополненного нулем. | 01, 02, …, 12 |
| %p | Языковой эквивалент AM или PM. | AM, PM (en_US); am, pm (de_DE) |
| %M | Минута - десятичное число, дополненное нулем. | 00, 01, …, 59 |
| %S | Секунда - это десятичное число, дополненное нулем. | 00, 01, …, 59 |
| %f | Микросекунда в виде десятичного числа, дополненного нулем слева. | 000000, 000001, …, 999999 |
| %z | Смещение по UTC в виде +HHMM или -HHMM (пустая строка, если объект является наивным). | (empty), +0000, -0400, +1030 |
| %Z | Название часового пояса (пустая строка, если объект является наивным). | (empty), UTC, EST, CST |
| %j | День года в виде десятичного числа, дополненного нулем. | 001, 002, …, 366 |
| %U | Номер недели в году (воскресенье - первый день недели) в виде десятичного числа с дополнением к нулю. Все дни в новом году, предшествующие первому воскресенью, считаются относящимися к неделе 0. | 00, 01, …, 53 |
| %W | Номер недели в году (понедельник - первый день недели) в виде десятичного числа. Все дни в новом году, предшествующие первому понедельнику, считаются неделей 0. | 00, 01, …, 53 |
| %c | Соответствующее языковому стандарту представление даты и времени. | Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) |
| %x | Соответствующее языковому стандарту представление даты. | 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE) |
| %X | Соответствующее времени представление в локали. | 21:30:00 (en_US); 21:30:00 (de_DE) |
| %% | Буквально символ ’%’ | % |
Перевод документации функции strftime
Более полная дока по шаблонизации тут: docxtpl.readthedocs.io/en/latest/.
И по Jinja тут: https://jinja.palletsprojects.com/en/stable/.