# views.py
def main(request): # 함수 이름이랑 html 이름이랑 맞춰주면 좋음
return render(request, 'posts/main.html') # render에서 항상 templates 폴더에 있는 html을 가져옴
# urls.py
from posts.views import main
urlpatterns = [
...
path('', main), # ''는 빈 경로로 사이트 메인을 뜻함
]
# settings.py
import os
TEMPLATES = [
...
'DIRS': [os.path.join(BASE_DIR, 'templates')], # DIRS 부분만 설정
# 기본 경로 인식을 못해서 기본 경로를 'templates'로 잡아주는 과정임
...
]
$ python manage.py startapp lovely # 'lovely' 라는 앱 생성
# settings.py
INSTALLED_APPS = [
...
'lovely',
]
# lovely/views.py
def first(request):
return render(request, 'lovely/first.html')
def second(request):
return render(request, 'lovely/second.html')
def third(request):
return render(request, 'lovely/third.html')
# urls.py
from lovely.views import first, second, third
urlpatterns = [
...
path('first/', first),
path('second/', second),
path('third/', third),
]
include
현재 urls.py에서 모든 경로를 다루고 있는데, 지금은 경로의 개수가 얼마 안되서 지저분하게 보이지 않지만, 앱이 많아지고 urls.py에 모든 경로를 집어 넣으면 코드가 방대해지고 유지보수가 어려워짐. 그것의 해결방안은 'include'로 따로 관리하는 것임.
# urls.py
...
from django.urls import path, include # 'include' 추가
urlpatterns = [
... # 기존 first, second, third 경로 삭제
path('lovely/', include('lovely.urls')) # 추가
]
# lovely/urls.py # 파일 생성
from django.urls import path
from .views import first, second, third
urlpatterns = [
path('first/', first, name="first"), # name 지정을 해주면 html에서 하이퍼링크 코딩을 할때 경로 설정이 편리해짐
# <a href='{% url "first" %}'>first</a>
# 이런 식으로 간편하게 경로 설정이 가능
# 추가로 동일한 name이 생길 경우엔 예) app_name = "lovely" 처럼 현재 파일에 변수 선언을 한 뒤 {% url "lovely:first" %}로 사용 가능함
path('second/', second, name="second"),
path('third/', third, name="third"),
]
$ touch templates/base.html
Bootstrap으로 뼈대 만들기 Bootstrap 홈페이지에서 docx 링크에 들어가서 템플릿을 복사해서 base.html에 붙여넣어준다.
# base.html
<body>
{% block content %} # 'content'라는 이름의 블럭을 만듦
{% endblock %} # 블럭을 닫음
...
<body>
# main.html
{% extends 'base.html' %} # base.html 가져오기
{% block content %}
<h1>
Hello, Django!
</h1>
<a href='{% url "lovely:first" %}'>first</a>
<a href='{% url "lovely:second" %}'>second</a>
<a href='{% url "lovely:third" %}'>third</a>
{% endblock %}
# first.html (second, third 모두 이와 같이 설정해줌)
{% extends 'base.html' %}
{% block content %}
<h1>
... page
</h1>
{% endblock %}
# settings.py
STATIC_URL = ...
STATICFILES_DIRS = [ # 추가
os.path.join(BASE_DIR, 'static')
]
# base.html
{% load static %} # static을 사용하기 위해서 최상단에 추가
<!doctype html>
...
<link rel="stylesheet" href="{% static 'css/project.css' %}"> # project.css 가져오기
# templates/share/_navbar.html # 폴더, 파일 생성 후 코드 추가
<nav class="..."> # Bootstrap에서 복사해둔 navbar 코드 붙여넣기
# base.html
<body>
{% include 'share/_navbar.html' %} # body 태그 최상단에 추가
...
{% extends 'base.html' %}
{% block content %}
{% include 'share/_navbar.html' %} # 'content' 블럭 안에 추가
<h1>
Hello, Django!
</h1>
...
{% endblock %}
# main.html
{% extends 'base.html' %}
{% load static %} # static을 사용하기 위해서 반드시 추가
...
<img src="{% static 'img/hanni.jpg' %}" alt="">
{% endblock %}