일단 vscode 자동완성을 오프 하자!!
나의 코드를 도와주고 몰라던 스펠링을 도와주던 나의 친구 자동완성
하지만 공부를 위해 잠시 바바이😭
settings -> intellisense 검색 -> 모든항목을 체크해제
해제할 것이 다소 많아 Json 파일에 추가해서 하라지만 나를 도와주던 친구들이 어떤 친구들인지 보며 체크를 해제했다.
누군가가 이 글을 읽은다면 나와 같이 자동완성을 끄고 진행했으면 좋겠다.
손가락으로 하나하나 쓰면서 공부하는 것이 큰 도움이 된다는 점을 기억했으면 한다.
request -> urls -> views -> templates -> respones
이런 식으로 HTTP 요청이 들어오면 urls에서 요청을 처리하고 view에서 template 에서 내용을 받아 HTTP 을답을 보내는 방식이다.
DTL
Django Template Language의 언어로 template에서만 사용하는 언어이다.
주로 python언어와 유사하며 HTML에서 사용한다.
사용방법은
render(request, 'html', content )
이런식으로 contant에 데이터를 담아 보내준다 기본적으로 dictionary 방식이다.
기본적으로 변수(variable), 태그(tage), 필터(filters), 주석(comments) 총 4개지로 이루어져 있다.
변수는 밑에 코드처럼 사용하며 html에서 content에서 받아온 내용을 사용이 가능하며 {{}}안에다가 작성을 해야 한다.
{{ variable }}
태그는 python에서도 사용하는 if 문이나 for 문인데 python과 사용이 비슷해서 편리하고 {%%} 모양으로 작성한다.
{% if variable %}
html태그 나 원하는
{% endif %}
하지만 약간 다른 부분 마지막 중에 endif 꼭 끝나는 부분을 명시해 줘야 한다.
필러는 python에서 length나 join 이런 것처럼 사용하는 것인데 바티컬 바 | 와 함께 사용한다.
{{ variable|filter }}
{% if variable|filter %}
이런 시구로 사용이 가능한다.
주석은 DTL을 주석해 주는 방식으로 예전에 HTML주석을 방식을 이용해서 주석을 줘도 오류가 발생했는데 지금이 주석 내용을 보니까 왜 오류가 생겼는지 알 거 같다. (엄청 고생했는데ㅠㅠ)
{# comment #}
{% comment %}
{% endcomment %}
정말 여러 가지 내용들과 적용 방법이 있다.
강의 들으며 나의 성격이 되어 버린 Django 공식문서 링크이다.
https://docs.djangoproject.com/en/4.2/ 여기서 궁금한 것들을 찾아보며 공부하 나는데... 영어문서다 보니 힘들긴 하지만 보는 연습을 많이 해야겠다ㅠㅠ(번역도 가능하나 영어이해가 더 좋다고 하니 보는 습관을 들이자!!)
base.html
우리가 HTML파일들을 여러 개 만들어 사용하면서 공통적으로 사용하는 부분이 있다.
그런데 HTML파일들에 다 이것들을 붙여다 작성을 한다면 우린.. 너무 길고 지저분한 코드를 볼 것이다.
이문제를 해결하기 위한 것이 base.html이다.
우리가 기본 바탄인 부분을 base.html에 남겨두고 내용들만 불러와서 사용하면 된다.
1. app파일 말고 상위 우리 프로젝트에 templates 만들기
2. base.html 파일 생성
base.html에 만들 파일에서 언제가 교체가 가능한 부분을
{% block content %}
{% endblock content %}
이와 같이 작성해 주고
불러오고 싶은 html 파일과 연동 extends 시겨주면된다.
{% extends 'base.html'%}
{% block content %}
원하는 내용
{% endblock content%}
이런 식으로 html을 작성해 주면 된다.
코드도 아주 짧아지고 보기에도 깔끔하고 너무 좋다. (content는 내가 원하는 대로 변경이 가능)
마지막으로 위의 것들을 연동시 겨주면 된다.
1. settings.py 에서 TEMPLATE찾기
2. 'DIRS'부분에다가 BASE_DIR / 'templates' 입력
위의 내용이 궁금하지만 지금은 그냥 app templates에서만 찾아서보 화면으로 보여주던 것을 '모든 templates의에서 찾게 해 준다'라고 생각하면 될 거 같다.
form 데이터 받아오기
html에서 form 태그에서 정보를 받아와 보여주기까지의 기능을 구현하려고 한다.
<form action="" method="">
<label for=""> </label>
<input type="" id="" name="">
<button type="submit"> </button>
</form>
form의 action을 통해 어디로 method 방법으로 input값을 보낼지 하는 내용이다.
action을 통해 누가 request을 method에서 정의 한 방법으로 받을지는 views.py(요청을 처리하고 보내는)에서 정의해 줘야 한다.
그냥 url로 보내는 방법도 있지만 우리는 urls.py에서 정의한 링크로 보내기도 가능하다.
method에서 HTTP로 보내는데 Hyper Text Transfer Protocol로 통신규약 약속이다. 그중에서도 GET과 POST가 있는데
POST는 약가 회원가입 보이면 안 되는 GET은 쿼리스트링 Query String Parmeters로 url에 데이터가 표시되는 방식이다.
그래서 input 인자에 name 인자를 넣는데 데이터를 보낼 때 dictionary 방식으로 보내기 때문에 꼭 넣어줘야 하고 views.py에서 받아오는 값을 명시해 줘야 한다.
variable = request.GET.get('input name')
이런 식으로 받아 온다. request.GET은 궁금해서 찾아보려 했으나 아직은 '아 그렇구나'하고 넘어갔다.
받은 정보도 다시 render에서 context로 송출이 가능하다.