파이참에서 장고 파이썬/템플릿 코드 스타일을 자동으로 깔끔하게 정리하기 (Feat. black, djlint)

툴이 소스코드를 저장할 때마다 알아서 코드 스타일을 깔끔하게 맞춰준다면? 너무 편리하겠죠? ;-) // 장고에서 파이썬 코드를 위한 `black`유틸리티를 적용하고, 장고 템플릿 코드를 위한 `djlint`유틸리티를 적용하는 방법에 대해서 다뤄보겠습니다.

소스코드 자동 포맷팅의 장점

  1. 일관성 있는 코드 스타일
    • 프로그래머가 정한 규칙에 따라 코드를 자동으로 정리할 수 있습니다. 이를 통해 일관성 있는 코드 스타일을 유지할 수 있습니다.
  2. 코드 가독성의 향상
    • 들여쓰기, 줄 바꿈 등의 요소를 자동으로 조정하여 코드의 가독성을 향상시킵니다.
  3. 협업 용이성
    • 팀원 모두가 코드를 일관되게 작성하면서 코드를 작성하는 시간을 단축시킬 수 있습니다.
  4. 시간 절약
    • 개발자가 직접 들여쓰기와 줄 바꿈 등을 수동으로 조정하는 시간을 절약할 수 있습니다.

아래에서는 파이참에서의 적용예시를 다루고 있으나, black/djlint는 명령행 유틸리티이기에 명령행에서도 사용가능하며, git의 pre-commit 도구로 등록하실 수도 있습니다. Visual Studio Code에서도 물론 사용가능합니다.

PyCharm Professional 과 Community 에디션의 차이

PyCharm Professional에는 기본에 File Watchers가 설치되어있습니다.

PyCharm Community 에서는 File Watchers 플러그인을 설치하시면, 동일한 UI로 설정하실 수 있습니다. 파이참 Settings의 Plugins 메뉴에서 file watchers를 검색하셔서 설치하실 수 있습니다.

제보해주신 끙 님에게 감사드립니다. :-)

파이참에서 파이썬 코드에 black 적용하기

black은 Python 코드 포매터 도구 중 하나입니다. black은 PEP 8 스타일 가이드를 따르며, 코드 가독성과 유지 보수성을 높이는 데 도움을 줍니다.

  • 필요한 라이브러리 : black
  • 공식문서 : https://black.readthedocs.io/
  • 실행할 명령 : black 파일경로
    • --line-length 옵션 : 1줄 최대 허용 문자수를 지정할 수 있습니다. 디폴트로 88입니다.
    • --target-version 옵션 : 파이썬 타겟버전을 지정할 수 있습니다. 생략하면 project.toml 내 메타정보를 참조하거나 자동으로 탐지합니다.

black 설치 후에, 설치된 black.exe의 절대경로를 알아내어야 합니다. 파워쉘에서는 다음과 같이 Get-Command 명령으로 알아내실 수 있으며, 명령프롬프트에서는 where 명령으로 알아내실 수 있습니다.

파워쉘> Get-Command black | Select-Object -ExpandProperty Path
C:\Projects\my-favorite-django\venv\Scripts\black.exe

위에서 알아낸 C:\Projects\my-favorite-django\venv\Scripts\black.exe 경로를 따로 복사해둡니다.

이제 파이참 File -> Settings 메뉴 Tools -> File Watchers 메뉴에서, + -> <custom> 항목을 선택해주세요.

1ccbfbcfcec6489f87dbe13b3b1d05e6.jpg

각 항목은 아래와 같이 기입해주세요.

  • Name : File watcher 이름입니다. 임의의 이름을 지정해주시면 되구요. 저는 black으로 지정했습니다.
  • File type : File watcher가 지켜볼 파일 타입을 지정합니다. Python을 선택해주세요.
  • Scope : 프로젝트 내 모든 파이썬 파일에 대해서 수행할 것이니 디폴트 값인 "Project Files" 그대로 둡니다.
  • Program : 위에서 복사한 black.exe 절대경로를 붙여넣기해주세요.
  • Arguments : black 파일경로 포맷으로 실행을 하려 합니다. 그럼 아래 스크린샷과 같이 $FilePath$ 매크로 문자열을 입력해주세요.
    • $FilePath$ 매크로 문자열을 직접 타이핑하지 않고, 우측의 +를 누르시면 사용 가능한 매크로 목록이 나옵니다. 이 목록에서 $FilePath$를 선택하셔도 됩니다.
    • 만약 --line-length 120 옵션을 지정하실려면 --line-length 120 $FilePath$ 로 입력하시면 됩니다.
  • Working directory : 작업 디렉토리는 프로젝트 루트 경로를 의미하는 $ProjectFileDir$를 지정해주세요
  • Advanced Options에서 디폴트 체크된 아래 2개 옵션을 체크해제해주세요.
    • [ ] Auto-save edited files to trigger the watcher
    • [ ] Trigger the watcher on external changes

1753946a57c648b8a1839650087a2d0b.jpg

OK 버튼을 눌러 저장해주세요.

지금부터 프로젝트 내 파이썬 소스코드 파일을 수정하시고, 저장하시면 black에 의해 소스코드의 포맷이 자동으로 맞춰짐을 확인하실 수 있습니다.

아래 코드의 경우

a=1
b=   2

for i in range(1, 10, 2):
    print(a,b,a*b)

다음과 같이 자동 변환됩니다. ;-)

a = 1

b = 2

for i in range(1, 10, 2):
    print(a, b, a * b)

자동 포맷팅을 수행하고 싶지 않은 영역이 있다면?

아래와 같이 # fmt: off로 지정한 줄부터 자동포맷팅이 적용되지않고, #fmt: on을 지정한 줄부터 다시 자동포맷팅이 적용됩니다.

a=1

# fmt: off
d=  4
# fmt: on

파이참에서 장고 템플릿에 djlint 적용하기

djlint의 적용방법은 위 black과 동일합니다.

  • 필요한 라이브러리 : djlint
  • 공식문서 : https://www.djlint.com/
  • 실행한 명령 : djlint 파일경로 --reformat --quiet --extension "html.dj" --profile django --preserve-blank-lines

djlint 설치 후에, 설치된 djlint.exe 유틸리티의 절대경로를 알아내어야 합니다. 파워쉘에서는 다음과 같이 Get-Command 명령으로 알아내실 수 있으며, 명령프롬프트에서는 where 명령으로 알아내실 수 있습니다.

파워쉘> Get-Command djlint | Select-Object -ExpandProperty Path
C:\Projects\my-favorite-django\venv\Scripts\djlint.exe

위에서 알아낸 C:\Projects\my-favorite-django\venv\Scripts\djlint.exe 경로를 따로 복사해둡니다.

이제 파이참 File -> Settings 메뉴 Tools -> File Watchers 메뉴에서, + -> <custom> 항목을 선택해주세요.

각 항목은 아래와 같이 기입해주세요.

  • Name : File watcher 이름입니다. 임의의 이름을 지정해주시면 되구요. 저는 djlint로 지정했습니다.
  • File type : File watcher가 지켜볼 파일 타입을 지정합니다. HTML 을 선택해주세요.
  • Scope : 프로젝트 내 모든 파이썬 파일에 대해서 수행할 것이니 디폴트 값인 "Project Files" 그대로 둡니다.
  • Program : 위에서 복사한 djlint.exe 절대경로를 붙여넣기해주세요.
  • Arguments : djlint 파일경로 --reformat --quiet --extension "html.dj" --profile django --preserve-blank-lines 포맷으로 실행을 하려 합니다. 그럼 아래 스크린샷과 같이 $FilePath$ --reformat --quiet --extension "html.dj" --profile django --preserve-blank-lines 문자열을 입력해주세요.
    • $FilePath$ 매크로 문자열을 직접 타이핑하지 않고, 우측의 +를 누르시면 사용 가능한 매크로 목록이 나옵니다. 이 목록에서 $FilePath$를 선택하셔도 됩니다.
  • Working directory : 작업 디렉토리는 프로젝트 루트 경로를 의미하는 $ProjectFileDir$를 지정해주세요
  • Advanced Options에서 디폴트 체크된 아래 2개 옵션을 체크해제해주세요.
    • [ ] Auto-save edited files to trigger the watcher
    • [ ] Trigger the watcher on external changes

e330df0457454649b9255742b2f062c0.jpg

OK 버튼을 눌러 저장해주세요.

*.html 확장자를 가지는 아래 코드의 경우

<html>
<head><meta charset="utf8" /><title>test djlint</title></head>
<body><h1>HELLO djlint</h1></body>
</html>

다음과 같이 자동변환됩니다. ;-)

<html>
    <head>
        <meta charset="utf8" />
        <title>test djlint</title>
    </head>
    <body>
        <h1>HELLO djlint</h1>
    </body>
</html>

자동 포맷팅을 수행하고 싶지 않은 영역이 있다면?

공식문서의 Ignoring Code 문서를 참고해보시면, 다양한 포맷이 지원됩니다.

HTML 주석 스타일

<!-- djlint:off -->
<bad html to ignore> <!-- djlint:on --></bad>

장고 템플릿 1줄 주석 스타일

{# djlint:off #} <bad html to ignore> {# djlint:on #}</bad>

장고 템플릿 여러 줄 주석 스타일

{% comment %} djlint:off {% endcomment %}
<bad html to ignore> {% comment %} djlint:on {% endcomment %}</bad>

이 외에도 다양한 연동방법에 대해서 공식문서에서 다루고 있으니, 꼭 살펴보세요. ;-)

pre-commit

git commit 과정에서 black을 자동으로 수행하고 싶으시다면, (kakaobrain) 효율적인 파이썬 코딩 컨벤션 관리를 위한 pre-commit 사용해보기 - Ted 영상을 참고해보세요.

  • 마지막 편집일시 : 2024년 2월 8일 1:38 오전
  • 최초 생성일시 : 2023년 2월 28일 10:26 오전
🌟 본 포스팅이 도움이 되셨다면 댓글 하나 남겨주시고, 널리 공유도 부탁드립니다. 🌟

댓글