[Django] 1
장고 너무 어려워...... 사실 어렵다기보단 헷갈리는게 너무 많고 익숙하지 않아서 같은 실수를 자주 반복해서 장고 일기(TIL + 코딩 도중 발생한 문제 정리) 적어보려고 한다... 아자아자.....................
가상환경 설치부터 장고 실행까지
- python -m venv venv
- source venv/Scripts/activate
- pip install -r requirements.txt
- django-admin startproject 프로젝트 이름 . (.을 붙여주는 이유는 따로 폴더를 안 만들고 냅다 플젝 만드는 편이 경로 지정에 편하기 때문에.)
- python manage.py startapp 앱 이름
- python manage.py runserver 서버 실행
내 가상환경을 저장해주고 싶으면 pip freeze > requirements.txt를 해준다.
Django는 URL > VIEW > TEMPLATE의 순서로 작동한다.
render()
request, template를 기본 인자로 받고 추가로 dictionary 형태의 context를 받아 처리한다. 여기서 context는 template에서 사용할 인자.
변수
render의 세 번째 인자로, dictionary 키 이름이 template에서 사용 가능한 변수명이 된다.
Filters
{{변수 | filter }}로 사용하고, 변수를 수정할 일이 있을 때 사용한다.
template의 상속
{% extends ‘부모 template’}은 자식 template가 부모 template를 상속한다는 것을 의미한다. 부모 template에는 {% block content%}{% endblock content%}로 적어서 상속받을 내용을 괄호 사이에 넣어준다.
Variable routing
URL 주소를 변수로 사용하는 것을 의미한다. url 일부를 변수로 지정하여 view 함수의 인자로 넘길 수 있다. 즉, 변수 값에 따라 하나의 path에 여러 페이지를 연결할 수 있다.
- 변수는 <>에 정의하며 view 함수의 인자로 할당된다.
- 기본 타입은 str이며, int:id와 같은 방식으로 사용할 수 있다.
urlpatterns=[
path('hello/<name>/', views.hello)
path('idnum/<int:id>/', views.idnum)
]
URL mapping
유지보수와 가독성 측면에서 각각의 app 폴더에 urls.py를 작성한다.
앱으로 include 시키고 싶을 경우 include를 import해주고, app 이름.urls를 urlpatterns에 적어주어 url을 mapping시킨다.
include는 다른 url을 참조할 수 있도록 하는 함수로, include가 있으면 path의 첫 인자까지만을 받고 그 뒤 부분은 include에 있는 url 파일을 참조한다.

naming URL patterns
path() 함수의 name 인자를 통해서 링크에 URL을 직접 작성하지 않을 수 있다. url에 이름을 붙여주어 view와 template에서 참조를 쉽게 할 수 있게 한다.

URL 태그
{% url ‘ ’%}template에서 사용한다. 따옴표 사이에 주어진 URL 패턴 이름 및 선택적 매개 변수와 일치하는 절대 경로 주소를 반환한다. urls.py에서 붙여준 이름을 templates에서 이용하는 것!
URL namespace
app_name = ‘’으로 app 이름을 지정(urls.py에서)해주면 서로 다른 앱에서 동일 URL 이름을 사용하는 경우에도 이름이 지정된 url을 고유하게 이용 가능하다.
