프로젝트는 한 웹사이트 전체를 포괄하는 큰 개념. 앱은 프로젝트 안에서 어떠한 기능을 하는 웹 애플리케이션. 웹사이트에서 프로젝트는 하나, 앱은 여러개.
프로젝트 생성: django-admin startproject 프로젝트명
앱 생성: django-admin startapp 앱이름
앱을 생성하면 그것을 장고에게 알려주어야 인식한다. settings.py의 INSTALLED_APPS에 앱 이름을 추가한다.
장고에서 웹사이트의 URL은 프로젝트의 메인 폴더의 urls.py에서 관리한다. 메인 폴더의 웹 주소 경로는 기본 주소의 끝부터 시작하므로 이 폴더의 urls.py에서 관리하는 url은 www.example.com/ 이후의 주소가 된다.
경로를 추가할 때는 urls.py의 urlpatterns 리스트 안에 path('url/', 불러올view이름, name(옵션)) 형식으로 작성한다. (url뒤에는 /를 붙여준다)메인 페이지는 url 없이 ''(공백)으로 처리한다.
하지만 기능을 추가하면서 앱이 늘어나면 모든 url을 한 곳에서 관리하는 것은 불편하므로 앱별로 url을 관리하는 것이 합리적일 것이다. 이를 위해서는
path('url/(메인페이지라면 필요x)', include('app이름.urls'))
와 같은 식으로 작성한다. 여기서 include()
함수는 URLConf라는 모듈을 인자로 받는데, 위의 .urls에 해당한다.
이 때 django.urls 모듈에서 include()함수를 import 해야 한다. 또한 view를 불러오고자 한다면 view도 import 하는 것을 잊으면 안된다.
view는 장고에서 화면에서 실행될 내용을 정해주는 함수들이 들어있다. 웹페이지에서 실행되는 로직이 여기에 저장되고, 데이터베이스에 저장된 데이터를 모델을 불러옴으로써 사용할 수 있다.
return 값으로 render함수를 사용하여 템플릿에서 작성한 화면을 띄워줄 수 있는데, 필수적인 인자로 request, 템플릿이름을 넣어주고 context라고 하여 html에서 view에서 작성한 객체를 사용할 수 있는 딕셔너리도 필요하다면 넣어줄 수 있다.
장고에서 html을 인식하기 위해서는 반드시 manage.py가 있는 디렉터리에 templates폴더(철자주의)를 생성해 그 안에 html파일을 넣어야 한다.
템플릿 안에서 반복문, 조건문을 사용하거나 view에서 작성한 객체를 사용하기 위해서는 템플릿 언어를 사용해야 한다.
변수를 사용하려면 위에서 언급한 context를 미리 작성해 놓아야 한다. 작성했다면 html 안에서 {{설정한 변수명}}을 사용하면 어디서든 view의 객체의 속성값을 불러올 수 있다. 반복문, 조건문을 사용할 때는 아래와 같이 반드시 닫는 for/if문을 써야 한다.
{% for i in examples %}
....
{% endfor %}
{% if .. %}
....
{% endif %}
닫는 태그가 필요 없는 것은 css를 불러오는 {% load static %}, 템플릿을 상속하는 {% extends 'template.html' %}, 템플릿을 포함시킬 수 있는 {% include 'template.html' %} 등이 있다.
CSS, Javascript, 이미지파일을 장고에서 사용하기 위해서는 템플릿과 마찬가지로 특정 폴더에 CSS파일을 넣어야 한다. 장고에서는 static이라는 폴더를 manage.py가 있는 디렉터리에 생성한다.
또한 settings.py에서 파일 밑에 STATIC_URL='/static/'
이라고 된 곳의 밑에 아래와 같은 경로를 추가해 준다.
# os 모듈이 미리 import 되어있지 않다면 먼저 import
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
html에서 css를 넣을 때 사용는 link태그에서 href에는 {% static 'css파일 경로'%}를 입력한다.
이미지파일은 static폴더 내에 별도의 폴더를 생성하여 그곳에 파일을 넣는다. 그리고 방금 설명한 settings.py의 하단에 MEDIA_URL='/이미지폴더명/'을 삽입한다. html에는 <img src="{% static '폴더명/파일.형식' %}">과 같이 삽입한다.
이렇게 어려운데 머리속의 들어있다니 ... 대단스 합니다 .