당신은 멋쟁이, 우리는 장고쟁이~

0%

TodoList 8편 - 프로젝트 Templates 설정

이전 포스팅에서,


BULMA CSS를 프로젝트에서 사용하기 위한 준비를 하였습니다.


static 폴더안에 Bulma 폴더가 생성되고, 그안에 CSS 폴더안에, style.css 파일이 생성되었습니다.



이제 이 CSS 를 적용한 기본 템플릿을 생성하고,


이 기본 템플릿을 다른 페이지들이 상속받아 사용하게 해봅니다.


Templates 폴더 생성



프로젝트 폴더안에, templates 폴더를 생성합니다.


그리고, 그 폴더안에, base.html 파일을 생성합니다. 아래 트리 구조 형태로 생성합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
.
├── config
│ ├── asgi.py
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── requirements.txt
├── static
│ └── bulma
│ ├── css
│ │ ├── style.css
│ │ ├── style.css.map
│ │ └── style.min.css
│ └── sass
│ ├── package.json
│ ├── package-lock.json
│ └── style.sass
├── templates
│ └── base.html
└── todo
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ ├── 0001_initial.py
│ ├── 0002_auto_20200511_1242.py
│ ├── __init__.py
├── models.py
├── templates
│ └── todo
│ └── todo-lists.html
├── tests.py
├── urls.py
└── views.py


생성된 templates 폴더 설정하기


생성된 templates 폴더를,


프로젝트의 templates 폴더로 사용하기 위해서,
config/settings.py 파일에 templates 폴더를 지정해주어야 합니다.


settings.py 파일안에, TEMPLATES 부분에, DIR 값을 아래와 같이 설정해 줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], # Templates folder 설정
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]


base.html 파일 꾸미기


templates/base.html 파일은, 다른 템플릿 페이지들이 상속받아서 사용할 페이지 입니다.

base.html 파일을 아래와 같이 생성해 줍니다. 이 파일은 BULMA CSS 프레임워크가 적용되어 있고,
이 파일을 상속받는 다른 페이지들도, BULMA CSS 적용이 될것입니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

{% block title %}
<title>To do List</title>
{% endblock %}

{% block head %} {% endblock %}
</head>
<body>

{% block content %}

{% endblock %}

</body>
</html>


위와 같은 구조를 만들었으면,

이제 BULMA CSS 프레임워크를 이용하여, 기본 레이아웃 구조를 만들어 줍니다.



첫번째로, 네비게이션 바를 만들어 놓을겁니다.

이 네비게이션 바를 base.html 파일에 만들어놓고,
다른 페이지들이 이 base.html 파일을 확장하여 사용하면,

base.html 파일에 있는 네비게이션 바가, 기본으로 다른 페이지들에도 보이게 될것입니다.



Bulma CSS Navbar 를 적용하기 위해서, 아래 사이트를 참조합니다.


https://bulma.io/documentation/components/navbar/


이곳에 나와 있는 Basic Navbar 를 조금 수정하여, 사용할것입니다.

위에 작성한, base.html 파일에, 이 Bulma Navbar 를 아래와 같이 수정하여 붙여 놓습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
{% load static %}
<!DOCTYPE html>
<html lang="en" class="has-navbar-fixed-top">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">


<title>To do List - {% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% static 'bulma/css/style.css' %}">

{% block head %} {% endblock %}
</head>
<body>

<nav class="navbar is-fixed-top" role="navigation" aria-label="main navigation">
<div class="navbar-brand">
<a class="navbar-item" href="#">
<img src="{% static 'images/todo_list.jpg' %}" width="112" height="28">
</a>

<a role="button" class="navbar-burger burger" aria-label="menu" aria-expanded="false" data-target="navbarBasicExample">
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
</div>

<div id="navbarBasicExample" class="navbar-menu">
<div class="navbar-end">


<div class="navbar-end">
<a class="navbar-item">
Home
</a>

<a class="navbar-item">
To Do Lists
</a>

<div class="navbar-item has-dropdown is-hoverable">
<a class="navbar-link">
More
</a>

<div class="navbar-dropdown">
<a class="navbar-item">
About
</a>
<a class="navbar-item">
Jobs
</a>
<a class="navbar-item">
Contact
</a>
<hr class="navbar-divider">
<a class="navbar-item">
Report an issue
</a>
</div>
</div>
</div>
<div class="navbar-item">
<div class="buttons">
<a class="button is-primary">
<strong>Sign up</strong>
</a>
<a class="button is-light">
Log in
</a>
</div>
</div>
</div>
</div>
</nav>

<img src="{% static 'images/main.jpg' %}" width="100%">

{% block content %}

{% endblock %}

</body>
</html>



todolist_list.html 을 메인페이지로 사용


base.html 파일을 확장하는, templates/todollist_list.html 파일을 만들고,

여기에 Todo list 들이 나오게 할겁니다.



  1. templates/todolist_list.html 파일 생성

  2. todo/views.py 파일 수정

  3. todo/urls.py 파일 수정


templates/todolist_list.html 파일 생성후 작성



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{% extends 'base.html' %}

{% block title %}할일 목록{% endblock %}

{% block content %}

<ul>
{% for todo in to_do_list %}

<li>할일 제목 : {{ todo.name }}</li>


<li>생성 날짜 : {{ todo.date_created }}</li>

<li>데드라인 날짜 : {{ todo.date_deadline }}</li>

<li>남은 일수 : {{ todo.remaining_days }}</li>

{% endfor %}
</ul>

{% endblock content %}



todo/views.py 파일 수정


1
2
3
4
5
6
7
8
9
10
11
12
13
from django.shortcuts import render
from .models import TodoList, TodoList_files, TodoList_images
from django.views import generic

# Create your views here.


class IndexView(generic.ListView):
context_object_name = 'to_do_list'


def get_queryset(self):
return TodoList.objects.all()



config/urls.py 파일 수정



1
2
3
4
5
6
7
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('', include('todo.urls')),
]



위와 같은 작업을 마치고 나서,


서버를 시작하고

http://127.0.0.1:8000/ 으로 접속하면,

아래와 같은 화면이 나옵니다.




마치며..



아직 익숙치 않아서, 여러가지로 꼬이고 꼬였지만, 레슨이 하나 있었습니다.


View 에서 ListView 클래스를 사용하는데.

예네는 templates 을, templates/todolist_list.html 파일에서 찾습니다;;;

이 파일이 없으면, 렌더가 안되서.

이 파일을 생성하고 메인 url 로 설정해 주었습니다.