Данный инструмент позволяет рендерить итоговый текст на основе шаблона и данных. Шаблон поддерживает if, циклы и простые вычисления. Инструмент может быть использован для генерации сложного кода, таблиц данных и т. д., что позволяет уменьшить ручной труд.
Цель инструмента — обработка файлов с данными и шаблонами. Файлы с шаблонами и данными могут использоваться повторно и комбинироваться для создания различных файлов (например, для чтения столбцов из разных таблиц и генерации кода pojo и model). Это также упрощает вызов инструмента из других языков. Кроме того, предоставляется возможность вызова на основе текстовых и словарных данных, что удобно для языка программирования Python.
import NotSoFreeMarker
processed_str = NotSoFreeMarker.process(содержание шаблона, данные [тип карты], путь к файлу [необязательно])
processed_str = NotSoFreeMarker.process_file(путь к файлу шаблона, путь к файлу с данными json)
Данные должны быть в формате JSON. Обратите внимание, что требования к JSON в языке Python довольно строгие. Например, имена свойств должны заключаться в кавычки.
Кроме того, корневая структура данных не должна быть массивом. Если необходимо использовать массив, его следует поместить в какое-либо свойство, например:
// Нельзя
[
1,2,3,4
]
// Можно
{
"array":[1,2,3,4]
}
Если данные вводятся напрямую, они должны иметь тип map. В map можно вкладывать другие map или массивы.
Синтаксис шаблонов похож на Freemarker (автор сожалеет, что изначально не использовал Velocity, который кажется более простым в реализации), и поддерживает переменные, циклы, условия и простые выражения.
Здесь приведён пример данных, на котором основаны последующие примеры:
{
"a":1,
"b":2,
"c":[10,20,30],
"d":{
"e":"abc",
"f":"efg"
}
}
Переменные обозначаются как ${имя переменной}, например:
Также переменные поддерживают простые выражения, диапазон которых определяется возможностями Python, например:
При написании переменных поддерживаются простые функции, такие как упомянутая выше len. Однако, поскольку реализация довольно проста, поддерживаются только функции вида «имя функции (переменная)». Поэтому более сложные операции, такие как изменение содержимого на верхний регистр (${content.upper()}), невозможны, так как код не может распознать такие функции.
Чтобы решить эту проблему, автор написал несколько встроенных функций, которые инкапсулируют распространённые операции. Они начинаются с nsfm (${nsfm_upper(переменная)} может преобразовать содержимое переменной в верхний регистр).
Эти функции включают:
Причина поддержки только простых функций заключается в том, что написание функций довольно свободно, например, a.b.c(e.f.g), где a.b.c или e.f.g могут быть переменными или функциями (os.path.abspath). При разработке эта проблема не была тщательно продумана, поэтому есть некоторые ошибки. Для обеспечения доступности используется текущий способ реализации. Автор планирует улучшить его, когда у него будет время.
Циклы реализуются с помощью пары тегов <#list>.
Пример использования:
<#list d as item>
${item}
<#/list>
Вывод: 10 20 30
Для использования индекса в цикле можно добавить переменную index:
<#list items as (item,index)>
${item},${index}
<#/list>
Вывод: 10,0 20,1 30,2
Условия поддерживают if, elseif, else:
<#if a>0 >
a больше 0
<#elseif a<=0 and a>-1>
a находится между 0 и -1
<#else>
a меньше -1
</#if>
Обязательны теги <#if> и </#if>*, остальные два тега необязательны.
Шаблоны также поддерживают включение другого файла, что позволяет хранить общие части в отдельном файле.
<#include "путь к файлу">
Комментарии в шаблонах не отображаются в результатах.
Многострочные комментарии поддерживаются, но обратите внимание на отсутствие пробелов между символами # и -- в тегах <#-- и -->. Вложенные комментарии не поддерживаются.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )