Liquid Template이란? (펌)
Liquid Template 은 텍스트 기반 템플릿 언어로, 동적인 콘텐츠를 생성하고 가공하는 데 사용됩니다.
이 언어는 주로 웹 애플리케이션에서 템플릿을 구성하고 사용하는 데 활용되며,
Shopify와 같은 전자 상거래 플랫폼에서 주로 사용됩니다.
Liquid는 사용하기 쉬운 문법을 제공합니다.
. NET에서 사용하기 위해서는 여러 가지 패키지들이 나와있는데
여기서는 Fluid 로 사용하는 방법을 설명합니다.
Fluid는 Liquid 템플릿 언어를 기반으로 하는 오픈 소스 .NET 템플릿 엔진입니다.
https://github.com/sebastienros/fluid
Template 에 사용될 모델을 정의하고 Model 의 속성값에 따라 쿼리문을 동적으로 구성할 수 있습니다.
using Fluid;
namespace LiquidTest
{
internal class Program
{
static void Main(string[] args)
{
var parser = new FluidParser();
var model = new { Firstname = "Bill", Lastname = "Gates", Age = 30, Address = "USA" };
var source = @"
SELECT *
FROM Customer
WHERE 1=1
AND Name = '{{Firstname}} {{Lastname}}'
{% if Age > 18 %}
AND AgeType ='adult'
{% elsif Age > 12 %}
AND AgeType ='teenager'
{% else %}
AND AgeType ='child'
{% endif %}
{% if Address != ''%}
AND Address = '{{Address}}'
{% endif %}
";
if (parser.TryParse(source, out var template, out var error))
{
var context = new TemplateContext(model);
string result = template.Render(context);
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {error}");
}
Console.Read();
}
}
}
위 코드를 보면 알 수 있듯이 Model 에 정의된 Firstname, Lastname 값을 합쳐 쿼리문 조건값으로 사용할 수 있으며
Age 에 따라서 AND 조건에 들어갈 값을 동적으로 구성할 수 있습니다.
또한 값의 유무에 따라서 추가 쿼리를 넣을지 말지도 if 문을 통해 처리할 수 있습니다.
결과
그런데 결과를 보면 알 수 있듯이 if 문 사용한 부분이 빈 줄로 처리가 되어 보기 좋지 않습니다.
아래처럼 빈줄제거 코드를 추가해서 빈 줄을 제거합니다.
using System.Text.RegularExpressions;
using Fluid;
namespace LiquidTest
{
internal class Program
{
static void Main(string[] args)
{
var parser = new FluidParser();
var model = new { Firstname = "Bill", Lastname = "Gates", Age = 30, Address = "USA" };
var source = @"
SELECT *
FROM Customer
WHERE 1=1
AND Name = '{{Firstname}} {{Lastname}}'
{% if Age > 18 %}
AND AgeType ='adult'
{% elsif Age > 12 %}
AND AgeType ='teenager'
{% else %}
AND AgeType ='child'
{% endif %}
{% if Address != ''%}
AND Address = '{{Address}}'
{% endif %}
";
if (parser.TryParse(source, out var template, out var error))
{
var context = new TemplateContext(model);
string result = template.Render(context);
// 빈줄 제거
result = Regex.Replace(result, @"^\s*$\n", string.Empty, RegexOptions.Multiline);
Console.WriteLine(result);
}
else
{
Console.WriteLine($"Error: {error}");
}
Console.Read();
}
}
}
결과
C# DataTable은 Xml에서 스키마 유추를 지원하지 않습니다. (0) | 2024.03.13 |
---|---|
C# MemoryPack (0) | 2024.03.06 |
C# ArvoConvert 사용하기 (0) | 2024.03.04 |
C# Indexer 사용하기 (0) | 2024.03.04 |
C# NATS 를 이용해 Streaming Server 구성하기 (0) | 2024.03.03 |