상세 컨텐츠

본문 제목

[Django] 질문 목록 및 상세 페이지 만들기

Python/Django

by TUZA 2022. 9. 16. 15:49

본문

#view.py
# Create your views here.
from django.shortcuts import render
from .models import Question, Answer


def index(request):
    question_list = Question.objects.order_by('-create_date')
    content = {"question_list": question_list}
    return render(request, 'pybo/question_list.html', content)


#Question_objects_order_by('-create_date') 로 얻을 수 있다.
#order_by 는 조회 결과를 정렬하는 함수이다.
# '-' 는 역방향을 의미, 없으면 순방향 정렬이다.

 

'http://localhost:8000/pybo/ ' 라는 주소를 요청할 때 pybo/question_list.html 를 화면에 띄어준다.

그리고 content 변수에 'question_list' 라는 Key 와 question_list 라는 Value 를 담아 question_list.html 에 전달한다.

 

render() 는 파이썬 데이터를 템플릿에 적용하여 HTML 로 반환하는 함수이다.

즉, 위에서 사용한 render 함수는 질문 목록으로 조회한 question_list 데이터를 pybo/question_list.html 파일에 적용하여 HTML 을 생성한 후 리턴한다.

 

여기서 pybo/question_list.html 와 같은 파일을 템플릿(template) 이라고 부른다.

**템플릿 파일은 HTML 파일과 비슷하지만 파이썬 데이터를 읽어서 사용할 수 있는 HTML 파일이다.

 

#템플릿 디렉터리

render () 에 사용한 pybo/question_list.html 를 작성해야한다.

해당 템플릿을 생성하기 전에 템플릿 파일을 저장할 디렉터리를 생성해야한다.

템플릿을 저장할 디렉터리는 config/settings.py 파일의 TEMPLATES 항목에 설정해야한다.

DIRS 는 템플릿 디렉터리를 여러 개 등록할 수 있도록 리스트로 되어 있다.

 

모든 앱이 공통으로 사용할 템플릿 디렉터리 /templates

pybo 앱이 사용할 템플릿 디렉터리 /templates/pybo

common 앱이 사용할 템플릿 디렉터리 /templates/common

 

#템플릿 파일

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

for 문 안에서 사용할 수 있는 forloop 속성

 

#URL 매핑 추가하기

#pybo/urls.py

path('<int: question_id>', views.detail),


#path('<int: question_id>', views.detail)
#http://localhost:8000/pybo/2 페이지가 요청되면 여기에 등록한 매핑 룰에 의해 
#http://localhost:8000/pybo/<int:question_id> 가 적용되어 question_id 에 2가 저장되고
#views.detail 함수도 실행할 것이다. <int:question_id> 에서 int 는 숫자가 매핑됨을 의미한다.

 

#HTTP 주요 응답코드

반응형

'Python > Django' 카테고리의 다른 글

[Django] 데이터 저장 (복습필요)  (0) 2022.09.16
[Django] URL 별칭  (0) 2022.09.16
[Django] 모델(Model)  (15) 2022.09.15
[Django] 장고 관리자 (admin)  (1) 2022.09.15
[Django] 앱(APP) 생성하기 (복습)  (0) 2022.09.10

관련글 더보기