[django] python django 게시판 만들기 - getbootstrap으로 홈페이지 반응형으로 꾸미기
부트스트랩을 이용해 홈페이지 꾸미기
model, admin 설정 : https://integer-ji.tistory.com/89
views에 데이터 가져오기 : https://integer-ji.tistory.com/90
detail page 만들기 : https://integer-ji.tistory.com/91
setting 설정, 데이터 자르기, 정렬하기 : https://integer-ji.tistory.com/93
언제나 시작은 가상 환경 실행, 디렉터리 이동
source myvenv/Scripts/activate
cd crudproject/
홈페이지 다듬기
<h1>Django 게시판 만들기</h1>
<!--
<br><br>
<form action="{% url 'new' %}">
<textarea cols="40" rows="10" name='fulltext'></textarea>
<br><br>
<input type="submit" value="count!" />
</form>
<br>
-->
{% for blog in blogs.all %}
<h1>{{ blog.title }}</h1>
<p>{{ blog.pub_date | date:"Y-m-d" }}</p>
<p>{{ blog.summary }}<a href="{% url 'detail' blog.id %}"> ...자세히 보기</a></p>
{% endfor %}
<!-- -->을 이용해 워드 카운트 부분은 주석 처리해줍니다.
나중에 정리가 되면 추가하면 됩니다.
getbootstrap 홈페이지 접속
Bootstrap
The most popular HTML, CSS, and JS library in the world.
getbootstrap.com
부트스트랩은 다양한 양식을 제공해줍니다. 거기다 반응형으로써 모바일에서도 동작하죠
하지만 단점으로는 다 똑같은걸 사용해 거기서 거기란 점?
첫 번째로 보면 좋은 항목은 Documentation의 components입니다.
여기서 Card모양이나 알림 창 등 다양한 양식을 골라 적용할 수 있습니다.
두 번째로는 Examples입니다.
이곳에서 완성된 페이지의 샘플을 가져올 수 있죠
bootstrap CSS, JS, Popper.js, and jQuery 가져오기
부트스트랩 메인 페이지 하단에 CSS와 JQuery를 복사합니다. ( 총 4줄 )
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
home.html에 h1태그를 삭제 후 head를 만든 뒤 해당 CSS와 JQuery를 넣어줍니다.
Navbar 선택하기
홈페이지 상단에 Navbar를 선택하여 가져옵니다.
맨 처음에 있는 거 사용 소스 Copy 클릭
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
</body>
home.html에 body를 만든 후 안에다가 넣어줍니다.
주석 부분을 제외한 저희가 가져온 blog 게시물들을 body안에 넣어줍니다.
runserver
Navbar이 잘 나오는 걸 확인합니다.
아래 글들이 별로네요
저는 Card에서 Body 저부분을 가져오겠습니다. Copy
<head>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
<br>
{% for blog in blogs.all %}
<div class="container">
<div class="card">
<div class="card-body">
<h1>{{ blog.title }}</h1>
<p>{{ blog.pub_date | date:"Y-m-d" }}</p>
<p>{{ blog.summary }}<a href="{% url 'detail' blog.id %}"> ...자세히 보기</a></p>
</div>
</div>
</div>
<br>
{% endfor %}
</body>
<!--
<br><br>
<form action="{% url 'new' %}">
<textarea cols="40" rows="10" name='fulltext'></textarea>
<br><br>
<input type="submit" value="count!" />
</form>
<br>
-->
card만 가져와서는 저렇게 안 나옵니다.
먼저 nav랑 거리를 두기 위해 </nav> 아래에 <br> 태그를 사용해 주었고
for문을 돌릴 때 저희는 blog글 하나를 돌리는 게 아니라 blog를 감싼 card를 돌려함으로
card를 다 넣어줍니다.
그리고 card를 container로 묶어 양 옆 화면 끝이 아니라 지금 화면처럼 적절하게 묶어줍니다.
만약 없으면 어떻게 되는지 여러 가지 시도해보세요 :D
하지만 detail.html로 들어가 보면 다시 돌아가 있습니다.
아무것도 없기 때문이죠..
그렇다면 home.html의 소스를 전부 detail.html에도 넣어줘야 하는데
그렇게 되면 html을 만들 때마다 다 복사 붙여 넣기 해아 합니다.
다음 시간엔 템플릿 상속을 하여 중복되는 소스를 처리하겠습니다.
git push
git init
git add .
git commit -m "코멘트"
git push origin master
앗 코멘트 실수
- 끝 -
---
'코딩공부 > Python Django' 카테고리의 다른 글
[django 실습] 게시판 만들기 - 디자인 수정 기록 (0) | 2020.02.21 |
---|---|
[django 실습] 게시판 만들기 - 템플릿 상속, url 관리하기 (0) | 2020.02.21 |
[django 실습] 게시판 만들기 - 한글 설정, 한국 시간 설정, 데이터 자르기, 정렬하기 (0) | 2020.02.19 |
[django 실습] 게시판 만들기 - detail page 만들기 (0) | 2020.02.18 |
[django 실습] 게시판 만들기 - views에 데이터 가져오기 (0) | 2020.02.18 |