책 '점프 투 플라스크'를 공부하면서 정리한 내용입니다.
출처 : https://wikidocs.net/book/4542
<!doctype html>
<html lang="ko">
<head>
(... 생략 ...)
</head>
<body>
<!-- ------------------------------ [edit] -------------------------------- -->
<!-- 네비게이션바 -->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<a class="navbar-brand" href="{{ url_for('main.index') }}">Pybo</a>
<button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse flex-grow-0" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item ">
<a class="nav-link" href="#">계정생성</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="#">로그인</a>
</li>
</ul>
</div>
</nav>
<!-- ---------------------------------------------------------------------- -->
<!-- 기본 템플릿 안에 삽입될 내용 Start -->
{% block content %}
{% endblock %}
<!-- 기본 템플릿 안에 삽입될 내용 End -->
</body>
</html>
모든 화면이 상속하는 base.html 파일에 추가됐으므로 네이게이션 바는 질문 목록 조회, 질문 상세 조회, 질문 등록 화면 모두에 나타난다.
웹 브라우저의 너비를 줄였을 때 ‘계정생성’과 ‘로그인’ 링크가 사라지면서 햄버거 메뉴 버튼이 생긴다. 부트스트랩은 크기가 작은 기기를 고려한 '반응형 웹'까지 적용되었기 때문이다.
but, 햄버거 메뉴 버튼을 클릭해도 반응이 없다. -> 부트스트랩 자바스크립트 파일(bootstrap.min.js)이 base.html 파일에 포함되지 않았기 때문, 또한 부트스트랩 자바스크립트 파일은 제이쿼리를 기반으로 만들어졌기 때문에 제이쿼리 파일이 필요하다.
부트스트랩 자바스크립트 파일은 bootstrap-4.5.3-dist.zip 압축 파일에 존재. 이 파일을 찾아 C:/projects/myproject/pybo/static/bootstrap.min.js에 복사
<!-- jQuery JS -->
<script src="{{ url_for('static', filename='jquery-3.5.1.min.js') }}"></script>
<!-- Bootstrap JS -->
<script src="{{ url_for('static', filename='bootstrap.min.js') }}"></script>
<!-- ---------------------------------------------------------------------- -->
제이쿼리 버전 확인 필수!
플라스크에는 템플릿 특정 위치에 HTML을 삽입해 주는 include 기능이 있다.
navbar을 분리시켜서 include 기능으로 base.html에 삽입시킨다.
<!-- 네비게이션바 -->
<!-- ------------------------------ [edit] -------------------------------- -->
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<a class="navbar-brand" href="{{ url_for('main.index') }}">Pybo</a>
<button class="navbar-toggler ml-auto" type="button" data-toggle="collapse" data-target="#navbarNav"
aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse flex-grow-0" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item ">
<a class="nav-link" href="#">계정생성</a>
</li>
<li class="nav-item ">
<a class="nav-link" href="#">로그인</a>
</li>
</ul>
</div>
</nav>
<!-- ---------------------------------------------------------------------- -->
{% include "navbar.html" %}
include 기능은 템플릿의 특정 영역을 중복, 반복 사용할 시 유용하다. 중복, 반복 하는 템플릿의 특정 영역을 따로 템플릿 파일로 만들고 include 기능으로 포함한다.