● 부트스트랩
부트스트랩 설치
https://getbootstrap.com/docs/5.1/getting-started/download/
* 자세한 설명 : https://wikidocs.net/70838
※ 부트스트랩 주의사항
부트스트랩은 3.x, 4.x, 5.x 등의 버전이 존재하고 메이저 번호(3, 4, 5)에 따라 그 사용방법이 다르다.
프로젝트 관련 버전에 맞게 사용하는 것이 중요하다.
** bootstrap.min.css 파일 static 폴더에 붙여넣기
※ 부트스트랩 저장 경로
projects\mysite\static\bootstrap.min.css

- 부트스트랩 적용
[파일명: projects\mysite\templates\pybo\question_list.html] 수정
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'bootstrap.min.css' %}">
<div class="container my-3">
<table class="table">
<thead>
<tr class="table-dark">
<th>번호</th>
<th>제목</th>
<th>작성일자</th>
</tr>
</thead>
<tbody>
{% if question_list %} <!-- question_list가 존재하면 -->
{%for question in question_list %} <!-- for 반복문 사용, :(콜론) 미사용 -->
<tr>
<td>{{ forloop.counter }}</td> <!-- 번호 출력 -->
<td>
<a href="{% url 'pybo:detail' question.id %}">{{question.subject}}</a> <!-- 제목 출력 -->
</td>
<td>{{ question.create_date }}</td> <--! 작성일 출력 -->
</tr>
{% endfor %} <!-- for 반복문이 끝나니 필수 작성 -->
{% else %} <!-- 데이터가 없을 경우 -->
<tr>
<td colspan="3">질문이 업습니다.</td>
</tr>
{% endif %} <!-- if문 종료 -->
</tbody>
</table>
</div>
** for 문의 현재 순서를 의미하는 {{ forloop.counter }} 사용
** class="container my-3", class="table", class="table-dark" 등은 부트스트랩 스타일에 정의되어 있는 클래스
** 부트스트랩 참조 URL : https://getbootstrap.com/docs/5.1/getting-started/introduction/

- 질문 상세 템플릿 부트스트랩 적용
[파일명: projects\mysite\templates\pybo\question_detail.html]
{% load static %}
<link rel="stylesheet" type="text/css" href="{% static 'bootstrap.min.css' %}">
<div class="container my-3">
<!-- 질문 -->
<h2 class="border-bottom py-2">{{ question.subject }}</h2>
<div class="card my-3">
<div class="card-body">
<div class="card-text" style="white-space: pre-line;">{{ question.content }}</div>
<div class="d-flex justify-content-end">
<div class="badge bg-light text-dark p-2">
{{ question.create_date }}
</div>
</div>
</div>
</div>
<!-- 답변 -->
<h5 class="border-bottom my-3 py-2">{{question.answer_set.count}}개의 답변이 있습니다.</h5>
{% for answer in question.answer_set.all %}
<div class="card my-3">
<div class="card-body">
<div class="card-text" style="white-space: pre-line;">{{ answer.content }}</div>
<div class="d-flex justify-content-end">
<div class="badge bg-light text-dark p-2">
{{ answer.create_date }}
</div>
</div>
</div>
</div>
{% endfor %}
<!-- 답변 등록 -->
<form action="{% url 'pybo:answer_create' question.id %}" method="post" class="my-3">
{% csrf_token %}
<div class="mb-3">
<label for="content" class="form-label">답변내용</label>
<textarea name="content" id="content" class="form-control" rows="10"></textarea>
</div>
<input type="submit" value="답변등록" class="btn btn-primary">
</form>
</div>
부트스트랩 card 컴포넌트 :
https://getbootstrap.com/docs/5.1/components/card/
※ 사용한 부트스트랩 클래스 표
| 부트스트랩 클래스 | 설명 |
| card, card-body, card-text | 부트스트랩 Card 컴포넌트 |
| badge | 부트스트랩 Badge 컴포넌트 |
| form-control, form-label | 부트스트랩 Form 컴포넌트 |
| border-bottom | 아래방향 테두리 선 |
| my-3 | 상하 마진값 3 |
| py-2 | 상하 패딩값 2 |
| p-2 | 상하좌우 패딩값 2 |
| d-flex justify-content-end | 컴포넌트의 우측 정렬 |
| bg-light | 연회색 배경 |
| text-dark | 검은색 글씨 |
| text-start | 좌측 정렬 |
| btn btn-primary | 부트스트랩 버튼 컴포넌트 |
** 질문 내용과 답변 내용에는 style="white-space: pre-line;" 타일을 지정 // 글 내용의 줄 바꿈 정상 표시
'Web > Django' 카테고리의 다른 글
| Django - 폼 (0) | 2024.05.21 |
|---|---|
| Django - 템플릿 상속 (0) | 2024.05.18 |
| Django - 스태틱 (0) | 2024.05.18 |
| Django - 데이터 저장 (0) | 2024.05.18 |
| Django - URL 별칭 (0) | 2024.05.18 |