Шаблоны документов
В учётной записи абонента есть вкладка “Шаблоны документов”. Там можно управлять списком шалонов для всех абонентов. Кроме классических операций CRUD можно посмотреть историю изменений шалона, и получить сформированных для абонента документ, кликнув по ссылке с именем файла шаблона.
Форматирование
Заголовок раздела «Форматирование»Чтоб подставить в документ значения из учётной записи абонента, используйте двойные фигурные скобки с пробелом. Например, переменная var
:
{{ var }}
Пример текста шаблона документа:
Заголовок.Имя: {{ fio }}платёжный код: {{ username }}Тедефон: {{ p_tel }}И осатальное: {{ description }}
Серийный номер оконечного оборудования абонента: {{ device.serial }}Мак адрес оконечного оборудования абонента: {{ device.mac }}
Оформите так документ в формате docx
, загрузите в реестр шалонов в системе. И можете скачивать отформатированные версии ля каждого абонента. Сформированный документ из примера выше будет выглядеть, например, так:
Заголовок.Имя: Иавнов Иван Ивановичплатёжный код: 123456Тедефон: +79781234567И осатальное: Длинное описание в учётной записи абонента
Серийный номер оконечного оборудования абонента: 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": "+79781234567", "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/.