1 분 소요

Template

이번 글에선 기존 MVC 디자인 패턴에서 View에 해당하는 Template를 다뤄보자.

community app 의 index page에 질문 모델을 출력하는 것을 목표로 진행해본다.

views.py

우선 views.py 에서 index 함수를 수정해줄 필요가 있다.

from django.shortcuts import render
from .models import Question


def index(request):
    """ 
    """
    question_list = Question.objects.all()
    context = {'question_list': question_list}
    return render(request,'community/question_list.html',context)

질문 모델을 import 해준 후에 question_list 에 모든 Question 모델을 저장해준다.

그리고 context에 딕셔너리 형태로 저장한다.

render 함수를 통해 question_list를 템플릿(‘community/question_list.html’)에 적용하여 HTML로 반환한다.

템플릿 파일은 HTML 파일과 비슷하지만 장고에서만 사용하는 태그를 사용하는 HTML 파일이다.

템플릿 디렉토리 생성

위에서 정의한 ‘community/question_list.html’ 탬플릿 파일을 작성하기 위해 디렉토리를 만들어보자,

우선 settings.py 의 TEMPLATES 항목에 코드를 추가하여야 한다.

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [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 항목에 조금 후에 만들 templates 디렉토리를 등록해주자.

templates 디렉토리는 app의 하위에도 존재 가능하고 프로젝트 하위에도 존재가 가능하다.

app 디렉토리 내부에 만들 경우 따로 설정해주지 않아도 자동으로 인식한다.

하지만 관례적으로 프로젝트에 templates 디렉토리를 생성한 후 그 안에서 app 별로 디렉토리를 ㅐㅅㅇ성하여 관리하는 경우가 일반적이라고 한다.

그러므로 프로젝트/templates/앱의 구조로 디렉토리를 구성해보자.

템플릿 생성

위에서 만든 디렉토리 구조대로 해당 앱의 디렉토리에 question_list.html 파일을 생성해주자.

하단의 코드를 작성한다.


{% if question_list %}
    <ul>
    {% for question in question_list %}
        <li><a href="/community/{{ question.id }}/">{{ question.subject }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>질문이 없습니다.</p>
{% endif %}

해당 코드에 대한 설명은 render 함수를 통해 전달 받은 context(qusetion_list) 가 존재한다면 해당 리스트를 question 에 대입하여 id로 링크를 설정 해주고 제목을 출력한다는 뜻이다.

탬플릿 태그는 다른 글에서 정리해보겠다.

이제 http://127.0.0.1:8000/community/의 주소로 가면 질문 목록이 생성 된 것을 확인 할 수 있다.

하지만 위의 탬플릿에서 정의한 id 로 구분되는 url 맵핑도 안 되어있고 해당 페이지의 템플릿 또한 만든 적이 없기 때문에 404에러가 발생한다.

디테일 페이지도 마찬가지의 방식으로 만들어보자.

댓글남기기