๋ถํธ์คํธ๋ฉ์ ์ด์ฉํ์ฌ ๋ฉ์ธํ์ด์ง์ ๋ ์ด์์์ ๋จผ์ ๋ง๋ค์ด์ฃผ๋ ค๊ณ ํ๋ค.
์ฐ์ , ๋ถํธ์คํธ๋ฉ ์์ํ
ํ๋ฆฟ์ ๊ฐ์ ธ์์ main.py
์ ๋ฃ์ด์ค๋ค.
-templates/instagram/main.html
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<title>Hello, world!</title>
</head>
<body>
<h1>Hello, world!</h1>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
-->
</body>
</html>
๋ค์์ผ๋ก ์๋จ ๋ค๋น๊ฒ์ด์ ๋ฐ๋ฅผ ๋ฃ์ด์ฃผ๋๋ก ํ๊ฒ ๋ค.
-templates/instagram/main.html
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-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 me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" aria-current="page" href="#">Home</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-bs-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li><a class="dropdown-item" href="#">Action</a></li>
<li><a class="dropdown-item" href="#">Another action</a></li>
<li><hr class="dropdown-divider"></li>
<li><a class="dropdown-item" href="#">Something else here</a></li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="d-flex">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</div>
</nav>
์ธ์คํ๊ทธ๋จ์ ํด๋ก ํ๊ธฐ ์ํด์๋ ๋ก๊ณ ์ ๊ฒ์์ฐฝ๋ง ์์ผ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ํ์ํ ๊ฒ๋ง ๋จ๊ธฐ๊ณ ์ง์์ค๋ค.
-templates/instagram/main.html
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#">Navbar</a>
<form class="d-flex">
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>
</div>
</nav>
Navbar๋ฅผ ์ธ์คํ๊ทธ๋จ ์ด๋ฏธ์ง๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ์ํด ์ธ์คํ๊ทธ๋จ์์ ์ด๋ฏธ์ง ์ฃผ์๋ฅผ ๋ณต์ฌํ๊ณ ์ฝ๋๋ฅผ ์์ ํด์ค๋ค.
-templates/instagram/main.html
<a class="navbar-brand" href="#"><img src="https://www.instagram.com/static/images/web/mobile_nav_type_logo.png/735145cfe0a4.png"></a>
google material icon์ ์ฐธ๊ณ ํ์ฌ ์๋จ ์์ด์ฝ์ ๋ฃ์ด์ค๋ค.
<!-- Google Material icon -->
<link
href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"
rel="stylesheet">
...
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container-fluid">
<a class="navbar-brand" href="#"><img src="https://www.instagram.com/static/images/web/mobile_nav_type_logo.png/735145cfe0a4.png"></a>
<input class="form-control me-2" type="search" placeholder="Search" aria-label="Search">
<span class="material-icons">home</span>
<span class="material-icons-outlined">send</span>
<span class="material-icons-outlined">add_box</span>
<span class="material-icons-outlined">explore</span>
<span class="material-icons-outlined">favorite_border</span>
</div>
</nav>
์ด์ css๋ฅผ ๋ง์ ธ๊ฐ๋ฉฐ ์ค์ ์ธ์คํ๊ทธ๋จ๊ณผ ๋น์ทํ๊ฒ ํ๋์ฉ ์์ ์ ํด์ฃผ๋๋ก ํ๋ค.
- templates/instagram/main.html
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<!-- Google Material icon -->
<link
href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"
rel="stylesheet">
<title>Hello, world!</title>
<style>
.navbar {
position: fixed;
width: 100%;
background-color: white;
border-bottom: solid 1px rgb(202, 202, 202);
}
.container-fluid {
justify-content: space-between;
min-width: 1000px;
width: 1000px
}
.navbar-search {
width: 300px;
font-size: 14px;
}
.body {
padding-top: 100px;
display: flex;
flex-direction: row;
justify-content: center;
font-size: 14px;
background-color: #FAFAFA
}
.left-body {
width: 630px;
min-width: 630px;
height: 1000px;
margin-right: 350px;
}
.right-body {
width: 320px;
min-width: 320px;
height: 1000px;
position: fixed;
margin-left: 650px;
}
.feed-box {
border: solid 1px rgb(202, 202, 202);
background-color: white;
margin-bottom: 25px;
}
.profile {
display: flex;
flex-direction: row;
align-items: center;
}
.profile-id {
font-weight: bold;
}
.profile-name {
font-size: 12px;
}
.profile-img-box {
width: 40px;
height: 40px;
border-radius: 70%;
overflow: hidden;
margin: 10px;
margin-right: 15px;
}
.profile-img {
width: 100%;
height: 100%;
object-fit: cover;
}
.profile-text {
flex-direction: column;
text-align: left;
}
#feed-img {
width: 100%;
}
.icon {
display: flex;
flex-direction: row;
justify-content: space-between;
margin: 10px;
}
.like {
text-align: left;
margin: 10px;
font-size: 13px;
}
.feed-text {
text-align: left;
margin: 10px;
}
.comment {
text-align: left;
margin: 10px;
}
#input-comment {
box-shadow: none;
border: none;
border-top: solid 1px rgb(202, 202, 202);
}
.recommend-msg {
display: flex;
flex-direction: row;
justify-content: space-between;
margin-left: 10px;
font-weight: bold;
margin-top: 10px;
margin-bottom: 7px;
}
#recommend-text {
color: grey;
}
#recommend-plus {
text-decoration: none;
color: black;
}
#follow {
text-decoration: none;
font-weight: bold;
color: rgb(70, 156, 255);
}
.recommend-lst {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
.information {
color: rgb(197, 197, 197);
font-size: 11px;
margin-left: 10px;
margin-top: 25px;
}
</style>
</head>
<body>
<!-- ํค๋ ์์ญ -->
<nav class="navbar">
<div class="container-fluid">
<a class="navbar-brand" href="#"><img
src="https://www.instagram.com/static/images/web/mobile_nav_type_logo.png/735145cfe0a4.png"></a>
<input class="navbar-search form-control me-2" type="search" placeholder="๊ฒ์" aria-label="Search">
<div class="navbar_icons">
<span class="material-icons">home</span>
<span class="material-icons-outlined">send</span>
<span class="material-icons-outlined">add_box</span>
<span class="material-icons-outlined">explore</span>
<span class="material-icons-outlined">favorite_border</span>
</div>
</div>
</nav>
<!-- ๋ฐ๋ ์์ญ -->
<div class="body">
<div class="left-body">
<div class="feed-box">
<div class="profile">
<div class="profile-img-box">
<img class="profile-img"
src="https://pbs.twimg.com/profile_images/1324185005883486208/gOBh4kKR_400x400.jpg">
</div>
<div class="profile-id">
jollyn
</div>
</div>
<div class="feed-img">
<img id="feed-img"
src="https://static-storychat.pstatic.net/2020/9/1/47/208797_hm2fj34m3df60.jpg">
</div>
<div class="icon">
<div>
<span class="material-icons-outlined">favorite_border</span>
<span class="material-icons-outlined">chat_bubble_outline</span>
<span class="material-icons-outlined">send</span>
</div>
<div>
<span class="material-icons-outlined">bookmark_border</span>
</div>
</div>
<div class="like">
django <b>์ธ 19๋ช
</b>์ด ์ข์ํฉ๋๋ค
</div>
<div class="feed-text">
<b>jollyn</b> ์ด๊ฑด ๋ง์น ์๊ณ ๋ฆฌ์ฆ ๋ณด๋ ๋์ ๋ชจ์ต
</div>
<div class="comment">
<div> <b>๊ธฐ๋</b> ์ฅ๊ณ ํ์ดํ
</div>
<div> <b>์ฌ๋ช
</b> ์๊ณ ๋ฆฌ์ฆ ํ์ดํ
</div>
<div> <b>์ด์ฑ</b> ํ์ด์ฌ ํ์ดํ
</div>
</div>
<div class="input-comment">
<input id="input-comment" type="text" class="form-control" placeholder="๋๊ธ ๋ฌ๊ธฐ...">
</div>
</div>
</div>
<div class="right-body">
<div class="profile">
<div class="profile-img-box" style="width: 60px; height: 60px;">
<img class="profile-img"
src="https://pbs.twimg.com/profile_images/1324185005883486208/gOBh4kKR_400x400.jpg">
</div>
<div class="profile-text">
<div class="profile-id">
jollyn
</div>
<div class="profile-name" style="color: grey;">
anneyujeong
</div>
</div>
</div>
<div class="recommend-msg">
<div id="recommend-text">ํ์๋์ ์ํ ์ถ์ฒ</div>
<a id="recommend-plus" "href="#">๋ชจ๋๋ณด๊ธฐ</a>
</div>
<div class="recommend-lst">
<div class="profile">
<div class="profile-img-box" style="width: 35px; height: 35px;">
<img class="profile-img"
src="https://pbs.twimg.com/profile_images/1324185005883486208/gOBh4kKR_400x400.jpg">
</div>
<div class="profile-text">
<div class="profile-id">
jollyn
</div>
<div class="profile-name" style="color: grey;">
๋ฏผ์ ๋ ์ธ 4๋ช
์ด ํ๋ก์ฐํฉ๋๋ค
</div>
</div>
</div>
<a id="follow" "href="#">ํ๋ก์ฐ</a>
</div>
<div class="recommend-lst">
<div class="profile">
<div class="profile-img-box" style="width: 35px; height: 35px;">
<img class="profile-img"
src="https://pbs.twimg.com/profile_images/1324185005883486208/gOBh4kKR_400x400.jpg">
</div>
<div class="profile-text">
<div class="profile-id">
jollyn
</div>
<div class="profile-name" style="color: grey;">
๋ฏผ์ ๋ ์ธ 4๋ช
์ด ํ๋ก์ฐํฉ๋๋ค
</div>
</div>
</div>
<a id="follow" "href="#">ํ๋ก์ฐ</a>
</div>
<div class="recommend-lst">
<div class="profile">
<div class="profile-img-box" style="width: 35px; height: 35px;">
<img class="profile-img"
src="https://pbs.twimg.com/profile_images/1324185005883486208/gOBh4kKR_400x400.jpg">
</div>
<div class="profile-text">
<div class="profile-id">
jollyn
</div>
<div class="profile-name" style="color: grey;">
๋ฏผ์ ๋ ์ธ 4๋ช
์ด ํ๋ก์ฐํฉ๋๋ค
</div>
</div>
</div>
<a id="follow" "href="#">ํ๋ก์ฐ</a>
</div>
<div class="information">
์๊ฐ ๋์๋ง ํ๋ณด์ผํฐ API ์ฑ์ฉ์ ๋ณด
<p>๊ฐ์ธ์ ๋ณด์ฒ๋ฆฌ๋ฐฉ์นจ ์ฝ๊ด ์์น ์ธ๊ธฐ๊ณ์ ํด์ํ๊ทธ ์ธ์ด</p>
ยฉ 2021 INSTAGRAM FROM META
</div>
</div>
<!-- Optional JavaScript; choose one of the two! -->
<!-- Option 1: Bootstrap Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"
integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p"
crossorigin="anonymous"></script>
<!-- Option 2: Separate Popper and Bootstrap JS -->
<!--
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.10.2/dist/umd/popper.min.js" integrity="sha384-7+zCNj/IqJ95wo16oMtfsKbZ9ccEh31eOz1HGyDuCQ6wgnyJNSYdrPa03rtR1zdB" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
-->
</body>
</html>
๊ฒฐ๊ณผ๋ ์ด๋ ๊ฒ ๋์จ๋ค
๐ ์ฐธ๊ณ
๊ฐ์
๊ฐ์์๋ฃ