"1. 장고 탬플릿 사전준비. 디렉터리 설정."의 두 판 사이의 차이

Pywiki
둘러보기로 가기 검색하러 가기
잔글 (Sam님이 1. 장고 탬플릿 문서를 1. 장고 탬플릿 디렉터리 문서로 이동했습니다)
잔글
 
(사용자 2명의 중간 판 3개는 보이지 않습니다)
1번째 줄: 1번째 줄:
 +
<youtube>https://www.youtube.com/watch?v=Oew1Yr9awRE</youtube>
 +
 
==개요==
 
==개요==
 
사용자에게 보여지는 화면을 디자인하는 것.
 
사용자에게 보여지는 화면을 디자인하는 것.
11번째 줄: 13번째 줄:
  
 
=== app별 디렉토리 규칙 ===
 
=== app별 디렉토리 규칙 ===
앱이름\templates\앱이름\탬플릿.html 형태로 저장한다. 굳이 앱이름 안에 다시 앱이름을 넣는 형태. 이렇게 하는 이유는, 장고가 templates디렉터리 안에 있는 html파일을 찾을 때 다른 앱에서 동일한 이름의 탬플릿을 사용하는 경우, 다른 앱의 탬플릿을 불러올 수도 있기 때문이다. 때문에 이름공간의 용도로 templates 디렉터리 안에 앱이름을 추가한다.(필수는 아니다.)
+
<code>앱이름\templates\앱이름\탬플릿.html</code> 형태로 저장한다. 굳이 앱이름 안에 다시 앱이름을 넣는 형태. 이렇게 하는 이유는, 장고가 templates디렉터리 안에 있는 html파일을 찾을 때 다른 앱에서 동일한 이름의 탬플릿을 사용하는 경우, 다른 앱의 탬플릿을 불러올 수도 있기 때문이다. 때문에 이름공간의 용도로 templates 디렉터리 안에 앱이름을 추가한다.(필수는 아니다.)
 
 
ps. 나중에 앱 내부에 templates 디렉토리를 추가한 경우, 탬플릿을 찾을 때 앱 내부의 templates 디렉토리를 검색하지 않곤 한다. 이땐 아래에서 설정하는 <code>'DIRS': [BASE_DIR / 'templates'],</code>를 주석처리 했다가 다시 실행하면 앱 내부의 templates도 검색한다.
 
 
 
+ 'APP_DIRS'옵션이 True로 되어있는지도 확인하자.
 
  
 
=== 공용  디렉토리 ===
 
=== 공용  디렉토리 ===
21번째 줄: 19번째 줄:
  
 
프로젝트 전체에서 공유하는 탬플릿이 있을 수 있다. 이런 경우엔 프로젝트 최상단 디렉터리에서 관리하는 게 편하기도 하다.
 
프로젝트 전체에서 공유하는 탬플릿이 있을 수 있다. 이런 경우엔 프로젝트 최상단 디렉터리에서 관리하는 게 편하기도 하다.
*config/settings.py의 TEMPLATE항목의 하위 DIR에 추가해야 탬플릿의 저장 디렉터리로 인식한다.
+
*settings.py의 TEMPLATE항목의 하위 DIR에 추가해야 탬플릿의 저장 디렉터리로 인식한다.
 
*공용템플릿을 모으는 경우엔 최상위에 templates 디렉터리를 만들어 관리한다. <code>'DIRS': [BASE_DIR / 'templates'],</code> 로 수정하면 <code>프로젝트/templates</code> 디렉터리 안에 있는 것들도 읽으라는 의미가 된다. 보통 공용템플릿은 이곳에 둔다.(공용탬플릿을 먼저 찾아보고, 각 앱 내의 탬플릿을 찾는다.)
 
*공용템플릿을 모으는 경우엔 최상위에 templates 디렉터리를 만들어 관리한다. <code>'DIRS': [BASE_DIR / 'templates'],</code> 로 수정하면 <code>프로젝트/templates</code> 디렉터리 안에 있는 것들도 읽으라는 의미가 된다. 보통 공용템플릿은 이곳에 둔다.(공용탬플릿을 먼저 찾아보고, 각 앱 내의 탬플릿을 찾는다.)
 
기본적인 TEMPLATES 옵션 형태는 다음과 같다.<syntaxhighlight lang="python">
 
기본적인 TEMPLATES 옵션 형태는 다음과 같다.<syntaxhighlight lang="python">
39번째 줄: 37번째 줄:
 
     },
 
     },
 
]
 
]
</syntaxhighlight><code>TypeError: unsupported operand type(s) for /: 'str' and 'str'</code>가 뜨면 DIRS 옵션의 내용을 <code>[os.path.join(BASE_DIR, 'templates')],</code> 로 바꿔주면 된다.
+
</syntaxhighlight>ps.  
  
 +
* <code>TypeError: unsupported operand type(s) for /: 'str' and 'str'</code>가 뜨면 DIRS 옵션의 내용을 <code>[os.path.join(BASE_DIR, 'templates')],</code> 로 바꿔주면 된다.
 +
* 나중에 앱 내부에 templates 디렉토리를 추가한 경우, 탬플릿을 찾을 때 앱 내부의 templates 디렉토리를 검색하지 않곤 한다. 이땐 아래에서 설정하는 <code>'DIRS': [BASE_DIR / 'templates'],</code>를 주석처리 했다가 다시 실행하면 앱 내부의 templates도 검색한다. + 'APP_DIRS'옵션이 True로 되어있는지도 확인하자.
  
 
[[분류:장고 탬플릿]]
 
[[분류:장고 탬플릿]]

2021년 6월 8일 (화) 19:30 기준 최신판

1 개요[편집 | 원본 편집]

사용자에게 보여지는 화면을 디자인하는 것.

1.1 기본 작동원리[편집 | 원본 편집]

  • view에서 render함수 등으로 탬플릿을 호출하면 탬플릿의 내용이 view에서 처리된다.
  • view에서 변수들을 다루어 최종적으로 html로 변환하여 내보낸다.

2 저장 디렉터리[편집 | 원본 편집]

기본적으로 앱 내부의 templates 디렉터리를 검색해 탬플릿을 찾는다.

2.1 app별 디렉토리 규칙[편집 | 원본 편집]

앱이름\templates\앱이름\탬플릿.html 형태로 저장한다. 굳이 앱이름 안에 다시 앱이름을 넣는 형태. 이렇게 하는 이유는, 장고가 templates디렉터리 안에 있는 html파일을 찾을 때 다른 앱에서 동일한 이름의 탬플릿을 사용하는 경우, 다른 앱의 탬플릿을 불러올 수도 있기 때문이다. 때문에 이름공간의 용도로 templates 디렉터리 안에 앱이름을 추가한다.(필수는 아니다.)

2.2 공용 디렉토리[편집 | 원본 편집]

기본 상태는 앱 하위에 templates의 html파일을 읽는다. 각각의 앱 하위에서 templates 디렉터리를 만들어 관리하는데, 취향에 따라 공용템플릿의 하위로 모으기도 한다.(탬플릿만 모아 체계적으로 관리하고 싶은 경우)

프로젝트 전체에서 공유하는 탬플릿이 있을 수 있다. 이런 경우엔 프로젝트 최상단 디렉터리에서 관리하는 게 편하기도 하다.

  • settings.py의 TEMPLATE항목의 하위 DIR에 추가해야 탬플릿의 저장 디렉터리로 인식한다.
  • 공용템플릿을 모으는 경우엔 최상위에 templates 디렉터리를 만들어 관리한다. 'DIRS': [BASE_DIR / 'templates'], 로 수정하면 프로젝트/templates 디렉터리 안에 있는 것들도 읽으라는 의미가 된다. 보통 공용템플릿은 이곳에 둔다.(공용탬플릿을 먼저 찾아보고, 각 앱 내의 탬플릿을 찾는다.)

기본적인 TEMPLATES 옵션 형태는 다음과 같다.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'APP_DIRS': True,
        'DIRS': [BASE_DIR / 'templates'],  # 앱 하위 디렉토리 외에 탬플릿을 검색하는 위치(추가 가능)
        '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',
            ],
        },
    },
]

ps.

  • TypeError: unsupported operand type(s) for /: 'str' and 'str'가 뜨면 DIRS 옵션의 내용을 [os.path.join(BASE_DIR, 'templates')], 로 바꿔주면 된다.
  • 나중에 앱 내부에 templates 디렉토리를 추가한 경우, 탬플릿을 찾을 때 앱 내부의 templates 디렉토리를 검색하지 않곤 한다. 이땐 아래에서 설정하는 'DIRS': [BASE_DIR / 'templates'],를 주석처리 했다가 다시 실행하면 앱 내부의 templates도 검색한다. + 'APP_DIRS'옵션이 True로 되어있는지도 확인하자.