이번에는 상속(block)에 대해서 알아보겠습니다.
반복되는 html 코드를 block 으로 처리하여 반복적으로 사용가능하게 코딩할 수 있다.
일반적인 구조는 프로젝트 레벨에서 base.html 파일을 갖고, 애플리케이션 레벨의 base.html파일에서 프로젝트 레벨의 base.html을 확장하거나, 상속하는 구조로 구성한다.
템플릿과 프로젝트 디렉토리를 등록하기 위해 settings를 편집하고, 그 다음엔 템플릿 상속에 대해 알아보겠습니다.
1. 프로젝트 레벨에서 templates 폴더를 생성하고 여기에 프로젝트 레벨의 base.html 파일을 만든다.
./my_site/templates/base.html
{% comment %} ./my_site/templates/base.html {% endcomment %}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>THIS IS ABOVE THE BLOCK IN BASE.HTML</h1>
{% block content %}
{% endblock content %}
<h1>THIS IS BELOW THE BLOCK IN BASE.HTML</h1>
</body>
</html>
2. 상속받을 html 파일 만들기 - ./my_site/my_app/templates/my_app/example.html
주의사항은 "{% extends "base.html" %}" 부분이 최상단에 있어야 한다. 윗 부분에 주석이 있으면 오류 발생함.
{% extends "base.html" %}
{% block content %}
<h2>Example HTML template</h2>
<h2>This is inside the block in EXAMPLE.HTML</h2>
{% endblock content %}
3. 프로젝트 레벨의 settings.py 설정하여 프로젝트 레벨의 templates 위치를 등록한다.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # <=== 설정부분
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
결과 화면
'Python > Django' 카테고리의 다른 글
[Django] Django - 정적 파일 (0) | 2022.10.27 |
---|---|
[Django] Django - 사용자 정의 오류 템플릿 (0) | 2022.10.27 |
[Django] Django - Tags(url) (0) | 2022.10.27 |
[Django] Django - Tags(for, if) (0) | 2022.10.27 |
[Django] Django - filter (0) | 2022.10.27 |