지금은 위 페이지를 요청하면 앞서 설정해준대로 "안녕하세요 pybo 입니다." 라는 문구가 출력될 것이다.
질문 목록이 출력되도록 pybo/views.py 파일의 index 함수를 다음과 같이 변경하자.


Question.objects.order_by('-create_date') | 질문 목록 데이터 얻을 수 있음
order_by('-create_date') | 작성일시 역순으로 정렬 (- 기호가 붙어 있으면 역방향, 없으면 순방향 정렬을 의미)
render 함수 | 질문 목록으로 조회한 question_list 데이터를 pybo/question_list.html 파일에 적용해 HTML 생성 후 리턴
pybo/question_list.html 파일 | 템플릿
템플릿 디렉터리
이제 render 함수에서 사용한 pybo/question_list.html 템플릿 파일을 작성해야 한다.
하지만 템플릿 파일을 작성하기 전에 템플릿 파일을 저장할 디렉터리를 먼저 만들어야 한다.
이는 config/settings.py 파일의 TEMPLATES 항목에 설정을 추가하자.
BASE_DIRS
템플릿 디렉터리를 여러개 등록할 수 있도록 리스트

BASE_DIR은 c:\projects\mysite 이므로 추가한 디렉터리의 전체 경로는 다음과 같을 것이다.
c:\projects\mysite\templates
이 디렉터리는 없으므로 다음과 같이 생성하자.
mkdir templates
cd templates
mkdir pybo

템플릿 파일 생성
이제 템플릿 파일을 만들어 보자.
pybo/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 %}

question_list.html에 사용된 템플릿 태그들을 하나씩 살펴보자.

템플릿 태그
장고에서 사용하는 템플릿 태그는 다음 3가지 유형만 알면 된다.
또한 항상 {% endif %} 태그로 닫아주어야 한다는 점을 잊지 말자.
-분기-
{% if 조건문1 %}
<p>조건문1에 해당되는 경우</p>
{% elif 조건문2 %}
<p>조건문2에 해당되는 경우</p>
{% else %}
<p>조건문1, 2에 모두 해당되지 않는 경우</p>
{% endif %}
-반복-
{% for item in list %}
<p>순서: {{ forloop.counter }} </p>
<p>{{ item }}</p>
{% endfor %}

-객체 출력-
{{ 객체 }}
예) {{ item }} -> 객체에 속성이 있는 경우는 파이썬과 동일한 방법으로 도트(.) 문자를 이용하여 표시하면 된다.
{{ 객체.속성 }}
예) {{question.id}}, {{question.subject}}
-테스트-
여기까지 수정하고 http://localhost:8000/pybo/ 페이지를 요청하면 다음과 같이 변경된 화면을 볼 수 있을 것이다.

-urls.py-
다음 질문 중 하나를 클릭해보면 아래와 같은 오류가 표시될 것이다.
http://localhost:8000/pybo/2/와 같은 페이지에 대한 URL매핑이 아직 없기 때문이다.

질문 목록 화면에서 링크를 클릭하여 요청한 질문 상세 URL은 다음과 같다.
http://localhost:8000/pybo/2/
#id 값이 2인 Question을 상세 조회한다.
이 URL이 동작할 수 있도록 pybo/urls.py 파일을 다음과 같이 수정하자.
path('<int:question_id>/', views.detail) 라는 URL 매핑을 추가했다.

이제 http://localhost:8000/pybo/2/ 페이지가 요청되면 question_id 에 2가 저장되고 views.detail 함수도 실행될 것이다. <int:question_id> 에서 int는 숫자가 매핑됨을 의미한다.
-views.py-
이제 위 URL 매핑 규칙에 의해 실행되는 views.detail 함수를 만들어야 한다.
다음처럼 pybo/views.py 파일에 detail 함수를 추가하자.

다시 http://localhost:8000/pybo/2/ 페이지를 요청해 보면 아래와 같이 질문 상세 기능이 만들어진 것을 볼 수 있다!

'Django' 카테고리의 다른 글
| (7) 데이터 저장 및 스태틱 (0) | 2024.07.02 |
|---|---|
| (6) URL 별칭 (0) | 2024.07.02 |
| (4) 장고 관리자 (1) | 2024.07.02 |
| (3) 장고에서 모델 사용하기 (0) | 2024.07.01 |
| (2) phybo 앱 생성 및 장고 프로그램 만들기 (2) | 2024.07.01 |