Python-Markdown의 테이블 렌더링 지원

Python // 2024년 08월 05일 작성 // 2024년 08월 13일 업데이트

Python-Markdown으로 마크다운 문서를 HTML로 렌더링 할 때는 뭔가 고급(?) 기능이 빠진 것 같이 렌더링이 된다. 예를 들어 테이블의 경우가 그렇다.

다행히도 테이블 렌더링이 지원되지 않는 것은 아니다. 사실 아주 간단하다.

Python-Markdown에서 테이벌 렌더링 지원하기

테이블 렌더링을 지원하려면 간단히 tables 확장을 추가해 주면 된다. 예를 들자면 아래와 같은 식이다.

html = markdown.markdown(markdown_text, extensions=['tables'])

이 경우 테이블 문법으로 작성한 마크다운이 테이블 태그로 렌더링 된다.

정렬 속성 사용하기

위의 방식으로 테이블 확장을 사용할 경우 각 셀의 정렬(alignment)은 style 속성에 CSS가 명시되는 방식으로 적용된다. 만약 style이 아닌 align 속성으로 정렬되도록 하고 싶다면 별도의 옵션을 줄 수 있다. 이 경우 해당 확장 클래스 자체를 가져와서 매개변수를 전달해서 설정할 수 있다.

from markdown.extensions.tables import TableExtension

...

html = markdown.markdown(
    markdown_text, 
    extensions=[TableExtension(use_align_attribute=True)]
)

위와 같은 식으로 확장을 추가할 경우 마크다운 문서에 정렬 방식을 설정할 경우 각 셀에 align 속성이 적용되는 것을 볼 수 있다.

실제 렌더링 결과물

이 렌더링 예시는 별도의 설정 없는 기본적인 확장을 사용한 경우다. 실제 HTML 태그는 소스보기로 확인해 보자.

입력 마크다운 문서는 아래와 같다.

| 좌측 정렬 항목      | 기본 항목                          |      우측 정렬 항목 |
|:--------------------|------------------------------------|--------------------:|
| 왼쪽                | 기본                               |              오른쪽 |
| 그냥 약간 긴 문자열 | 그냥 약간 아주 조금만 더 긴 문자열 | 그냥 약간 긴 문자열 |
| **당연히**          | `다양한` *텍스트* 스타일을         |     쓸 수 있습니다. |

출력으로 렌더링 되는 결과는 아래와 같다.

좌측 정렬 항목 기본 항목 우측 정렬 항목
왼쪽 기본 오른쪽
그냥 약간 긴 문자열 그냥 약간 아주 조금만 더 긴 문자열 그냥 약간 긴 문자열
당연히 다양한 텍스트 스타일을 쓸 수 있습니다.

위 테이블이 잘 보인다면 별 문제는 없는 것이다.

관련된 글들