이번장에서는 약간의 styling이랑 design에 신경써볼것이다.
python으로 제공된 web framework가 있는것처럼 CSS framework들도 있다.
많은 CSS framework 중에서도 boostrapt이라는 css가 가장 유명하지만 이번기회에는 Materialize CSS 를 써볼것이다.
사용하기위해서 두가지 방법이 있는데 (hostedversion을 쓸지, 아니면 local에 다운받아서 고쳐쓸지...)할수있는데
일단 간단한 host에 있는걸 그냥 써보자.
CSS를 쓰려면 그 위치를 head tags에 추가해야한다.
Materialize CSS framework가 제공해주는 javascript도 같이 추가해주자.
mysite/main/templates/main/home.html
head
tags:
<head> {% load static %} <!-- Prism CSS --> <link href="{% static "tinymce/css/prism.css" %}" rel="stylesheet"> <!-- Compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> <!-- Compiled and minified JavaScript for Materialize CSS --> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> </head>
이제 css에서 제공하는 cards 기능이 적용되는지 아래 코드를 추가해서 확인해보자:
<div class="row"> <div class="col s12 m6"> <div class="card blue-grey darken-1"> <div class="card-content white-text"> <span class="card-title">Card Title</span> <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p> </div> <div class="card-action"> <a href="#">This is a link</a> <a href="#">This is a link</a> </div> </div> </div> </div>
이제 이것을 row tags 안에 우리의 loop를 추가해보자:
<div class="row"> {% for tut in tutorials %} <div class="col s12 m6"> <div class="card blue-grey darken-1"> <div class="card-content white-text"> <span class="card-title">Card Title</span> <p>I am a very simple card. I am good at containing small bits of information. I am convenient because I require little markup to use effectively.</p> </div> <div class="card-action"> <a href="#">This is a link</a> <a href="#">This is a link</a> </div> </div> </div> {% endfor %} </div>
그리고 우리의 card의 title과 내용을 바꾸자.
<div class="row"> {% for tut in tutorials %} <div class="col s12 m6"> <div class="card blue-grey darken-1"> <div class="card-content white-text"> <span class="card-title">{{tut.tutorial_title}}</span> <p>{{tut.tutorial_published}}</p> <p>{{tut.tutorial_content|safe}}</p> </div> </div> </div> {% endfor %} </div>
다음과 같이 바꼈다:
이렇게 간단히 CSS를 사용하는법을 알아봤는데 이에 관련된 자료는 더 찾아보면 엄청 나올것이다.
card size를 우리의 window 환경에 맞게 바꾸는걸 추천한다.
class="col s12 m6"
의 뜻은 card가 차지하는 크기의 뜻으로 small screen(mobile)에 맞춰져 있다. 12column(최대이다)
medium screen에는 card당 6 columns, 그래서 card가 2개 들어올수있고.
hoverable 옵션도 줄수잇다.
<div class="card blue-grey darken-1 hoverable">
published 내용은 좀 작게 설정하자
<p style="font-size:70%">Published {{tut.tutorial_published}}</p>
이제 메뉴 안내판 같은 navigation을 만들건데 이것은 모든 페이지에 적용되어야 할 사항이다.
모든 html에 이를 만드는것보다 Django에서는 extends와 includes기능이 있다.
extend라고 쓰면 미리 만들어둔 페이지의 코드가 이쪽에 replace되어 적용된다.
덮어쓸 내용
mysite/main/templates/main/header.html
을 일단 만들어두자:
<head> {% load static %} <!-- Prism CSS --> <link href="{% static "tinymce/css/prism.css" %}" rel="stylesheet"> <!-- Compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> <!-- Compiled and minified JavaScript --> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> </head> <body> {% block content %} {% endblock %} </body> <!-- Prism JS --> <script src="{% static "tinymce/js/prism.js" %}"></script>
이제 이 내용을 덮어쓰게끔 mysite/main/templates/main/home.html
을 아래와 같이 고치자:
{% extends 'main/header.html' %} {% block content %} <div class="row"> {% for tut in tutorials %} <div class="col s12 m6"> <div class="card blue-grey darken-1 hoverable"> <div class="card-content white-text"> <span class="card-title">{{tut.tutorial_title}}</span> <p style="font-size:70%">Published {{tut.tutorial_published}}</p> <p>{{tut.tutorial_content|safe}}</p> </div> </div> </div> {% endfor %} {% endblock %}
이제 header파일을 적용하면 모든 extends라고 적힌 html에 적용된다.
그럼 header에 nav bar을 만들어보자
navbar: Materialize CSS Navbar
여길 참고해서 만들면
<nav> <div class="nav-wrapper"> <a href="#" class="brand-logo">Logo</a> <ul id="nav-mobile" class="right hide-on-med-and-down"> <li><a href="sass.html">Sass</a></li> <li><a href="badges.html">Components</a></li> <li><a href="collapsible.html">JavaScript</a></li> </ul> </div> </nav>
이제 이를 body에 적용하면 최종 header.html
file은 아래와 같다:
<head> {% load static %} <!-- Prism CSS --> <link href="{% static "tinymce/css/prism.css" %}" rel="stylesheet"> <!-- Compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> <!-- Compiled and minified JavaScript --> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> </head> <body> <nav> <div class="nav-wrapper"> <a href="#" class="brand-logo">Logo</a> <ul id="nav-mobile" class="right hide-on-med-and-down"> <li><a href="sass.html">Sass</a></li> <li><a href="badges.html">Components</a></li> <li><a href="collapsible.html">JavaScript</a></li> </ul> </div> </nav> {% block content %} {% endblock %} </body> <!-- Prism JS --> <script src="{% static "tinymce/js/prism.js" %}"></script>
nav bar에 클릭하면 하이퍼링크 내용을 수정
<head> {% load static %} <!-- Prism CSS --> <link href="{% static "tinymce/css/prism.css" %}" rel="stylesheet"> <!-- Compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> <!-- Compiled and minified JavaScript --> <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> </head> <body> <nav> <div class="nav-wrapper"> <a href="/" class="brand-logo">Tutorials</a> <ul id="nav-mobile" class="right hide-on-med-and-down"> <li><a href="/">Home</a></li> <li><a href="https://discord.gg/sentdex">Community</a></li> <li><a href="/login">Login</a></li> <li><a href="/register">Register</a></li> </ul> </div> </nav> {% block content %} {% endblock %} </body> <!-- Prism JS --> <script src="{% static "tinymce/js/prism.js" %}"></script>
아직 링크 내용은 안만들었지만 곧 만들게 될것이다.
로컬로 다운로드해서 색같은거나 테마를 바꿔서 내 로컬 css를 가져오게끔 할수있다.
<link rel="stylesheet" href="{% static "main/css/materialize.css" %}">
'Backup > Django' 카테고리의 다른 글
[Django #7] Messages (0) | 2019.02.05 |
---|---|
[Django #6] User Registration (1) | 2019.02.04 |
[Django #4] Views and Templates (0) | 2019.02.03 |
[Django #3] Admin and Apps (1) | 2019.02.02 |
[Django #2] Models (0) | 2019.02.02 |