Python/초간단 장고 Django

6. Django: Templates

컴닥 2019. 7. 8. 20:15
반응형

알 필요는 없지만 장고의 템플릿 엔진을  DTL(Django Template Language)이라고 합니다. 

 

다른 템플릿 엔진도 사용이 가능하며, 템플릿 엔진에 관한 설정은 config/settings.py 에서 찾아볼 수 있습니다. 

다른 템플릿 엔진을 사용하는 것을 추천하진 않더군요. 

 

장고에서 클래스 뷰의 템플릿 폴더는 기본적으로 'app/templates/app'를 이용합니다. 
'app/templates' 까지는 이해가 가는데 뒤에 'app'이 한번 더 나오는 이유가 궁금하실 겁니다. 

 

다른 앱에 동일한 이름의 템플릿이 있는 경우 Django는 이들을 구분할 수 없습니다.
그래서 app이름으로 네임 스페이스를 만들어 둡니다.

하지만 앱이 하나 뿐이라면..

 

작성한 템플릿이 자동 인식이 되지 않을 때(폴더를 만든 경우?)가 있습니다.
장고를 재시작하면 됩니다. 

 

클래스 뷰를 설명할 때 테이블이 object_list 변수에 담겨서 템플릿에 넘어온다고 설명을 드렸습니다.

{{object_list}}로 직접 확인해봅니다. 

<!-- bookmarks/templates/bookmarks/bookmark_list.html -->
{{object_list}}
<QuerySet [<Bookmark: 야후>]>

오~! 잘 넘어왔네요.

 

장고 템플릿 언어에서는 HTML과 템플릿 언어를 분리하기 위해 {}를 사용합니다. 

{{}}는 변수, {%%}는 코드, {##}는 주석입니다. 

 

{{object_list}}를 그대로 쓸 수는 없으니까 언패킹 합니다. 

파이참에서 HTML을 생성(alt + insert)하면 기본 폼이 나와주니 작업하기 편합니다. 

<!-- bookmarks/templates/bookmarks/bookmark_list.html -->

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Bookmarks</title>
</head>
<body>
    <h1>북마크</h1>
    <div id="bookmark_list">
        <ul>
        {% for bookmark in object_list %}
            <li>{{bookmark.title}} <a href="{{bookmark.url}}" target="_blank">{{bookmark.url}}</a></li>
        {% endfor %}
        </ul>
    </div>
</body>
</html>

 

잘 작동됩니다. 

 

장고의 MTV 구조에 맞춰, 

뼈대만을 추려, 

최대한 간단히 쓰면서도 

꼭 필요한 설명은 빠트리지 않으려고 노력했습니다. 

 

도움되셨기를 바라며.. 

 

이제 장고 공식 홈페이지의 튜토리얼을 보시거나,

장고 걸스의 튜토리얼을 보러 갑시다. 

https://docs.djangoproject.com/ko/3.0/intro/tutorial01/

https://tutorial.djangogirls.org/ko/django_start_project/

 

가기 전에 도움 되셨다면 광고도 한번씩 봐주시면 감사하겠습니다. ㅎㅎ

반응형