html 상속

html을 상속하는 방법에는 여러가지 종류가 있을 수 있지만, 나의 경우 Jinja2 템플릿의 문법을 활용하여 상속하였다.

code

상속방법

이런식으로 작성을하면 상속이 완료된 것이다

사용처

나의 경우 다른 언어에서는 유지보수와 논리적 흐름에 따라 상속을 나누지만, html에서는 그보다는 재사용과 유연성에 초점을 맞추어서 나누는 편이다.

상속을 활용하면 좋을 때

아래의 게시물 내용은 참고사항일 뿐 코드를 작성하는 것은 개인의 스타일에 따라서 달라질 수 있다.

  • 일관되고 반복되는 템플릿

    footer와 헤더의 경우 다른 페이지에서도 재사용이 될 가능성이 큰 템플릿이다.

    따라서 이렇게 공통된 내용들은 상속을 통해 묶은 뒤 불러오고, 바디만 필요에따라 수정한다면 보다 편하게 사용가능할 것이다.

  • 유지 보수

    만약 footer나 헤더의 일부 내용이 변경되어야한다면, 상속에 의해 구조화되어있는 코드가 수정을 하기에 편하다.

    따라서 페이지의 구성요소가 복잡한 페이지나, 여러 페이지로 이루어진 웹을 제작할 때에는 상속을 활용하는 것이 개발자가 좀 더 편하게 일을 할 수 있다.

    flask사용시 유의점

    위와 같이 코드를 작성한 뒤 평소에는 return render_template(index.html)로 적었던 코드의 랜더링 경로를 자식 파일로 바꿍야한다.

    즉 위의 코드를 예시로 들자면 랜더링하는 템플릿이 index.html이 아니라 header.html이 되는 것이다.도대체 왜플라스크는 기본적으로 여러 개의 템플릿이 상속관계를 가지고 있을 때에 제일 마지막에 선언된 템플릿을 최종적으로 랜더링하게 된다.

이는 flask가 Jinja2 템플릿엔진을 기반으로 하기 때문이다.

간단하게 설명하면 플라스크는 웹 프레임 워크, Jinja2는 템플릿 엔진이다.

flask와 jinja2의 관계

flask 구동원리

flask는 간단하게 설명하면 다음과 같은 원리로 구동된다.

  • 1단계

    클라이언트는 http요청을 보낸다.

    플라스크는 @app.route('/엔드포인트')함수 중 이 상황에서 필요한 것을 찾아서 자동으로 매치하면 함수가 실행되고, 이후 데이터를 처리하거나 응답을 처리하게 된다.

  • 2단계

    응답은 html,json등으로 이루어져있고 만약 블로그와 같이 페이지의 전반이 바뀌는 상황 즉 템플릿이 필요한 상황이면 jinja2를 통해 생성된 html과 라우트 함수를 연동시켜준다.

    이렇게 생성된 html은 동적으로 생성된 html이라고 부른다.

  • 3단계

    랜더링된 최종 결과물을 클라이언트에게 보여준다.jinja2의 역할flask는 템플릿 엔진으로 jinja2를 채택하였다.

    그리고 이 jinja2의 문법을 통해 제어문, 반복문 등을 사용하는 동적인 콘텐츠의 생성이 가능하게 되는 것이다.

템플릿 엔진이란?

지정된 템플릿 양식과 데이터를 알아서 합쳐 html로 문서를 출력하는 시스템이다.

반복문 조건문 등을 사용하여 템플릿 내에서 편리하게 제어를 할 수 있도록 도와주거나, 템플릿 내의 변수들을 모아 보다 편하게 출력할 수 있도록 도와주는 일을 주로 한다.

이는 flask 즉 파이썬 쪽의 객체지향이 지향하는 방향성 때문이다.

flask기본 코드

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)
  • app = Flask(__name__)

    위 코드는 flask 어플리케이션을 생성하는 코드이다.

    네임 부분에는 모듈명이 들어가며 flask는 이를 토대로 어플리케이션의 위치와 구조를 찾게된다.

  • @app.route('/')

    위에서 설명한 라우트 함수로 라우팅될 경로(엔드포인트)와 함께 리턴을 할 내용물을 작성한다.

  • if __name__ == '__main__':

    모듈명이 main으로 제대로 왔는지 확인하는 함수로, 만약 경로에 이상이 없다면 디버깅을 실시한다는 뜻이다.

댓글남기기