본문 바로가기
👩🏻‍💻 개발 공부

[Flask 입문 4탄] 템플릿 함수와 HTML 자동 줄바꿈의 비밀까지 파헤치기

by minheestory 2025. 4. 15.

 

 

이번 글에서는 Flask 코드에서 자주 쓰이는 template() 함수에 대해 알아보고, HTML에서 줄바꿈이 어떻게 자동으로 일어나는지, 그리고 태그들의 동작 원리를 실제 코드와 함께 쉽게 설명해드릴게요 :)

 

템플릿 함수를 사용하는 이유는?

템플릿 함수 예시

 
def template(contents, content):
    return f'''<!doctype html>
    <html>
        <body>
            <h1><a href="/">WEB</a></h1>
            <ol>
                {contents}
            </ol>
            {content}
        </body>
    </html>
    '''

왜 템플릿 따로 함수로 만들었을까요?

  • 메인 페이지(/)와 상세 페이지(/read/1/) 모두 동일한 HTML 구조를 반복해서 사용하고있어요.
  • 다만, 바뀌는 부분은
    • 왼쪽 글 목록 → contents
    • 오른쪽 본문 내용 → content
  • 그래서 공통 구조는 함수로 재사용하고, 바뀌는 부분만 인자로 전달하는게 편리해요.

 

템플릿 없이 짰을 때 문제점

@app.route('/')
def index():
    return '''
    <html>
      <body>
        <h1><a href="/">WEB</a></h1>
        <ol>...</ol>
        <h2>Welcome</h2>
        Hello, Web
      </body>
    </html>
    '''
  • 글이 추가될 때마다 <li>를 직접 추가해야 하고, 코드 중복이 많아져서 관리와 유지보수가 어렵습니다.

 

실제 사용하는 예

@app.route('/read/<int:id>/')
def read(id):
    title = ''
    body = ''
    for topic in topics:
        if topic['id'] == id:
            title = topic['title']
            body = topic['body']
            break
    return template(getContents(), f'<h2>{title}</h2>{body}')
 
  • 본문 내용을 담은 f'<h2>{title}</h2>{body}'도 템플릿 함수에 넘겨서 화면에 표시하는 구조!

 

줄바꿈은 따로 안했는데… 왜 자동으로 줄이 나눠질까요?

return template(getContents(), f'<h2>{title}</h2>{body}')
  • 코드상에서는 줄을 나눠서 쓴 적이 없지만,
  • 브라우저에서는 이렇게 보여요:
HTML
html is...

 

실제 코드 실행 브라우저 예시

줄이 바뀌는건 HTML 태그의 성격 덕분이에요.

<h1>, <h2>, <p>, <ol>, <ul>, <div> 등은 "블록 요소(Block Element)" 라고 해요.

  • 이 태그들은 자기 줄을 하나씩 차지하면서 자동 줄바꿈을 해줘요.
  • 그래서 <h2> 뒤에 바로 텍스트가 이어져 있어도, 브라우저는 줄을 바꿔서 아래에 출력하는 거죠.
 

반대로 줄바꿈 안 되는 태그도 있어요

  • <span>, <b>, <i> 같은 인라인 요소들은 줄바꿈 없이 한 줄에 나란히 배치됩니다.
<span>hello</span><span>world</span>

→ 브라우저에서는: helloworld 이렇게 한 줄로 이어져서 나와요

 

실제 코드를 다시 보면:

f'<h2>{title}</h2>{body}'

이 문자열은 HTML5 문법 기준에서:

  • <h2> → 블록 요소라 한 줄 차지
  • {body} → 다음 줄에 출력됨

즉, 줄바꿈은 우리가 한 게 아니라 HTML이 자동으로 해주는 것이라고 생각하면 됩니다.

 

마지막 정리!

 

 

 

오늘도 Flask에 대해 정리 해 보았어요.

이해 안되는게 있다면 댓글로 남겨주세요 :)