django | 9. READ(HTMLでAdminデータを問い合わせる)


まず
1. main.htmlでデータの問題リストを表示できます.htmlにリンクするリンクを生成します.
2. question_list.htmlはhome/templatesで作成されます.

モデルデータの表示

# home/views.py

from django.shortcuts import render # render가 import 되어있다. (views.py기본 세팅)
from .models import Question # 모델 import 하기

...

def question_list(request):
  # questions = Question.objects.all() # Question 모델 데이터를 questions라고 한다.
  questions = Question.objects.order_by('-create_date') # Question 모델 데이터를 작성일시의 역순(-)으로 정렬한다.
  context = {'questions_list' : questions } # 위의 questions를 context 변수인 question_list에 저장한다.
  return render(request, 'home/question_list.html', context)
render関数はコンテキスト内のQuestionモデルデータ問題リストをHTMLコードに変換します.今はquestion listです.htmlファイルに適用されます.これらのファイルをテンプレート(template)と呼びます.注釈ラベルを追加できるHTMLと見なすだけです.
<!--  home/question_list.html -->

<h1>질문 리스트 보기</h1>

{% if questions_list %} # 앞에서 선언한 context 변수->render 함수에서 템플릿을 전달한 Question 모델 데이터가 저장되어 있다, question_list가 있다면
<ul>
  {% for question in questions_list %} # question_list를 반복하며 순차적으로 question에 대입
  <li>
    <a href="/home/{{ question.id }}/">{{ question.subject }}</a> # 위에서 선언한 question 객체의 id와 subject를 출력
  </li>
  {% endfor %}
</ul>
{% else %}
<p>질문이 없습니다.</p>
{% endif %}

テンプレートタグの3種類


ブランチ、リピート、オブジェクト

1.四半期

{% if 조건문1 %}
	<p>조건문 1</p>
{% elif 조건문2 %}
	<p>조건문 2</p>
{% else %}
	<p>조건문 1, 2에 모두 해당하지 않는 경우</p>
{% endif %}

2.繰り返し

{% for item in list %}
	<p>순서 : {{ forloop.counter }}</p>
    <p>{{ item }}</p>
{% endfor %}
重複テンプレートでは、forloopオブジェクトを使用できます.forloopオブジェクトは反復で有用な値を提供します.
forloopオブジェクトのプロパティはforloopを示します.1からforloopを逆方向文字文の順に表示します.0から0を反問順としてfor loopを表示します.firstfor文の最初の順序がTrueForloopである場合.Lastfor文の最後の順序であればTrue

3.対象

{{ question }}
{{ question.id }}
{{ question.subject }}
オブジェクトに属性がある場合は、.ハイフンを使用します.
テンプレートに正式なドキュメントをマーク

質問の詳細の表示

# home/urls.py

from django.urls import path
from .views import * # home>views에서 모든 함수를 가져온다.

app_name = "home"
urlpatterns = [
  ...
  path('<int:question_id>', question_detail, name="question_detail"), # 경로, 함수, 경로 이름, 경로는 home/<int:question_id>가 적용된다.
]
# home/views.py

...

def question_detail(request, question_id):
  question = Question.objects.get(id=question_id) # urls.py에 mapping된 question_id와 같은 것
  context = { 'a_question' : question } # 위의 question를 context 변수인 a_question에 저장한다. 
  return render(request, 'home/question_detail.html', context)
<!--  home/question_detail.html -->

<h1>{{ a_question.subject }}</h1>
<div>{{ a_question.content }}</div>
a questionオブジェクトは、question detail関数でrender関数に渡されるコンテキストに格納されたデータです.

URLを明確に作成

<!-- home/question_list.html -->

	...
	<!--
	<a href="/home/{{ question.id }}">{{ question.subject }}</a>
	대신 -->
	<a href="{% url 'home:question_detail' question.id %}">{{ question.subject }}</a>
	...

さまよう理由


home/question_list.htmlでは、パスは/home/{{ question.id }}/です.
home/urls.pyから経路<int:question_id>->/home/<int:question_id>へ.
最後に/の違いがあるかどうかがうろうろの原因になった.
まだあります.
home/question_list.htmlでは、パスはhome/{{ question.id }}、すなわちhome/home/{{ question.id }}である.
知る由もないよくわかりませんが...