#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 %}
#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 주요 응답코드
[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 |