django [Django 12] 템플릿 확장

2017.01.28 23:53

졸리운_곰 조회 수:873

 

1. 템플릿 확장

웹사이트를 개발하다 보면 모든 (혹은 많은) 웹 페이지마다 공통적으로 들어가는 HTML 코드가 있음을 알게 된다. 각 웹페이지마다 공통 코드를 중복해서 넣어 주는 것은 효율적이지 않다. Django 에서는 이러한 공통 부분을 기본 템플릿(Base Template)으로 만들고, 각 웹페이지 마다 변경이 필요한 부분만 코드를 작성하게 하는 템플릿 확장(Template Extension) 기능을 제공한다 (템플릿 확장은 또한 템플릿 상속(Template Inheritance)이라고도 불리운다).

Base 템플릿을 어디에 만드는가는 개발자가 템플릿을 어떻게 체계화하는가의 문제이다. 여기서는 모든 Django App에 공통적으로 적용되는 Base 템플릿을 (manage.py가 있는) Base Directory 밑의 templates 라는 서브 폴더에 만들어 보자. 즉, 아래 그림과 같이 ./templates/base.html 이라는 Base 템플릿을 만들었는데, 이 파일 안에 각 웹페이지에서 변경 혹은 삽입할 영역을 {% block content %} 으로 표시하였다.

Base 템플릿을 사용(확장)하는 각 Django App의 템플릿들은 각 App 폴더의 templates 폴더에 저장한다. 예를 들어, ./home/templates/index.html에서 base.html을 확장해서 사용한다고 가정해 보자. Base 템플릿을 사용(확장)하는 템플릿 (예: home/templates/index.html)은 아래와 같이 먼저 {% extends %} 확장 템플릿 태그를 사용하여 어떤 Base 템플릿을 사용하는지 지정해 주어야 한다. 이 extends 태그는 항상 템플릿의 처음에 와야 한다. 다음으로 {% block %} 블럭에 삽입하고자 하는 웹 페이지 내용을 작성한다. 아래 예에서는 간단히 h1 태그를 추가하였다. 만약 Base 템플릿에 여러 {% block %} 블럭이 있다면, 확장 템플릿에서 각 블럭의 이름별로 여러 블럭들을 추가할 수 있다.

1
2
3
4
5
{% extends "base.html" %}
 
{% block content %}
    <h1>{{message}}</h1>
{% endblock content %}

위의 Base 템플릿이 제대로 동작하기 위해서는 아래에서 설명할 템플릿 위치와 관련된 셋팅을 추가해 주어야 한다.

2. 템플릿 위치 셋팅

Django 템플릿 위치와 관련하여 두 가지 중요한 셋팅이 있는데, Django 프로젝트의 settings.py 안의 TEMPLATES 셋팅 중 DIRS 와 APP_DIRS 옵션이 그것이다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15     
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',
            ],
        },
    },
]

DIRS 옵션은 Django가 템플릿들을 찾는 디렉토리 경로를 지정하는 것으로, 원래는 비어 있었는데, 위의 같이 Base 디렉토리(BASE_DIR) 밑의 templates 폴더 경로를 추가하였다. 즉, BASE_DIR\templates 가 경로에 추가되어야만 base.html 템플릿을 찾을 수 있게 된다. 만약 DIRS에 여러 경로가 추가되면, Django는 경로 순서대로 검색하면서 템플릿을 찾게 된다.

APP_DIRS 옵션은 Django가 Django App 안의 templates 폴더에서 템플릿들을 찾을 것인지의 여부를 설정하는 것이다. 디폴트로 True가 설정되어 있어서 기본적으로 App안의 templates 폴더를 검색하여 템플릿을 찾게 된다.

 

[출처] http://pythonstudy.xyz/python/article/312-Django-%ED%85%9C%ED%94%8C%EB%A6%BF-%ED%99%95%EC%9E%A5

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
24 [파이썬으로 구현한 알고리즘] (4) 버블 정렬(Bubble Sort) file 졸리운_곰 2018.02.27 679
23 [파이썬으로 구현한 알고리즘] (3) 선택 정렬(Selection Sort) file 졸리운_곰 2018.02.27 549
22 [파이썬으로 구현한 알고리즘] (2) 스택/큐 (Stack/Queue) file 졸리운_곰 2018.02.27 607
21 [파이썬으로 구현한 알고리즘] (1) 연결 리스트(Linked List) file 졸리운_곰 2018.02.27 947
20 텍스트 마이닝 4편. 형태소 분석(1/3) 졸리운_곰 2018.02.18 2013
19 텍스트 마이닝 3편. 형태소 분석 사전작업 졸리운_곰 2018.02.18 761
18 텍스트 마이닝 2편. 텍스트 파일 file 졸리운_곰 2018.02.18 1199
17 텍스트 마이닝 1편. 소개 file 졸리운_곰 2018.02.18 913
16 파이썬으로 MySQL DB에 데이터 저장하기, Python handles transactions with MySQL file 졸리운_곰 2018.02.14 469
15 공공 데이터 csv 파일로 저장하기 [3] 졸리운_곰 2017.10.10 663
14 공공 데이터 csv 파일로 저장하기 [2] 졸리운_곰 2017.10.10 559
13 공공 데이터 csv 파일로 저장하기 [1] 졸리운_곰 2017.10.10 517
12 JSON 데이타 가을의곰 2017.06.18 595
11 python으로 json 파일 쉽게 파싱하기 가을의곰 2017.06.18 779
10 Python에서 SQLAlchemy로 MS-SQL 연동하기 졸리운_곰 2017.05.07 439
9 python에서 sqlite 사용법 file 졸리운_곰 2017.04.26 876
8 Python의 pandas를 사용하면 몇줄의 코드만으로 Data Analysis를 쉽고 강력하게 처리할 수 있다 file 졸리운_곰 2017.03.05 648
7 파이썬으로 XML 처리하기 졸리운_곰 2016.11.15 388
6 SQLAlchemy 시작하기 졸리운_곰 2016.06.11 948
5 SQLAlchemy 시작하기 – Part 2 졸리운_곰 2016.06.11 539
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED