바뀜

둘러보기로 가기 검색하러 가기
3,279 바이트 추가됨 ,  2023년 10월 25일 (수) 12:09
잔글
편집 요약 없음
2번째 줄: 2번째 줄:  
view에서 탬플릿을 호출한 후 변수들을 처리하는데, 이 변수들을 넣을 공간을 태그로 표시하여 처리한다.
 
view에서 탬플릿을 호출한 후 변수들을 처리하는데, 이 변수들을 넣을 공간을 태그로 표시하여 처리한다.
   −
파이썬 문법과 다른, 변수들을 처리하기 위해 탬플릿 내에서만 사용되는 문법이다.
+
view에서 탬플릿을 읽고 해당하는 지점을 기계적으로 처리하기때문에 html에서 주석으로 넣어도 작동해버린다.
   −
=각종 데이터 불러오기=
+
파이썬 문법과 다른(장고에서만 사용함.), 변수들을 처리하기 위해 탬플릿 내에서만 사용되는 문법이다.
 +
 
 +
=탬플릿 변수=
 +
중괄호 2개로 감싸인 형태로, 변수와 그 하위속성을 불러오기 위해 사용한다.
    
== 객체, 변수 불러오기 ==
 
== 객체, 변수 불러오기 ==
28번째 줄: 31번째 줄:  
2. 속성을 포함했는가?(객체(모델)의 속성을 보여준다.)
 
2. 속성을 포함했는가?(객체(모델)의 속성을 보여준다.)
   −
3. 리스트인가?
+
3. 리스트인가? 리스트의 경우, <code>객체.0</code> 형태로 인덱스로 정보를 뽑아낼 수 있다.
    
정의되어있지 않은 변수의 경우, 빈 문자열을 반환한다. 이 문자열을 변경하려면 settings.py에서 TEMPLATE_TRINGS_IF... 이걸 지정해주면 된다.
 
정의되어있지 않은 변수의 경우, 빈 문자열을 반환한다. 이 문자열을 변경하려면 settings.py에서 TEMPLATE_TRINGS_IF... 이걸 지정해주면 된다.
41번째 줄: 44번째 줄:  
|-
 
|-
 
|하위객체
 
|하위객체
|예컨대, question이라는 모델 아래에 answer이라는 모델이 연결되어 있다면, question을 템플릿에서 받은 후, 하위 모델에 접근할 수 있다.
+
|예컨대, Question이라는 모델 아래에 Answer이라는 모델이 연결되어 있다면, Question을 템플릿에서 받은 후, 하위 모델에 접근할 수 있다.
    
<nowiki>{{question.하위모델_set.all}}</nowiki> 형태로 하위모델을 모두 불러올 수 있다.
 
<nowiki>{{question.하위모델_set.all}}</nowiki> 형태로 하위모델을 모두 불러올 수 있다.
49번째 줄: 52번째 줄:       −
테이블명.속성_set.all : 테이블의 해당 속성 기록 모두를 의미한다.
+
테이블명.속성_set.all : 테이블(모델)의 하위에 속하는 테이블(모델) 모두를 의미한다.
 
  −
_set.all : 속성의 모든 레코드 가져오기...
   
|글에 달린 답변 불러오기.
 
|글에 달린 답변 불러오기.
 
|-
 
|-
60번째 줄: 61번째 줄:  
|글의 작성자 불러오기.
 
|글의 작성자 불러오기.
 
|}
 
|}
 +
 +
= 탬플릿 태그 =
 +
{% %} 로 둘러싸인 형태로, 특수한 기능을 구현하기 위해 사용한다.
    
== url 불러오기 ==
 
== url 불러오기 ==
68번째 줄: 72번째 줄:  
|{% url 인덱스 %}
 
|{% url 인덱스 %}
 
|하드코딩 대신 인덱스를 쓰기 위한 태그. urls.py의 path에서 name속성에 기입한 인덱스 주소를 불러온다.
 
|하드코딩 대신 인덱스를 쓰기 위한 태그. urls.py의 path에서 name속성에 기입한 인덱스 주소를 불러온다.
앱 이름을 지정했다면 {% url 앱이름:인덱스 %} 형태로 쓰인다.
+
앱 이름을 지정했다면 {% url '앱이름:인덱스' %} 형태로 쓰인다.
   −
변수를 보낼 수도 있어  <code>{% url 앱이름:인덱스 변수명 변수명2 %}</code> 형태로도 가능하다.
+
변수를 보낼 수도 있어  <code>{% url '앱이름:인덱스' 변수명 변수명2 %}</code> 형태로도 가능하다.
 
|}
 
|}
    
=== 템플릿에서 링크 연결 ===
 
=== 템플릿에서 링크 연결 ===
<a href = "{% url '주소' 넘길변수%}">나타낼내용</a>
+
url을 사용하기 위해선 다음과 같은 방법이 있다. 일반적으로 <a href="http://도메인/경로"></a> 형태로 사용하는데, 실제 주소 대신 다음과 같이 사용할 수 있다.
 +
{| class="wikitable"
 +
!방법
 +
!설명
 +
|-
 +
|기본 형태(하드코딩)
 +
|<syntaxhighlight lang="html+django">
 +
<a href="http://도메인/주소"></a>
 +
</syntaxhighlight>도메인이 바뀌거나 변경이 생기면 하드코딩의 경우 모든 페이지에서 일일이 바꾸어주어야 하는 불편이 있다.
 +
|-
 +
|태그 사용(인덱스 사용)
 +
|<syntaxhighlight lang="html+django">
 +
<a href = "{% url '인덱스' 넘길변수%}">나타낼내용</a>
 +
</syntaxhighlight>앱 안의 urls.py에서 지정한 name 속성을 따라 연결한다.
 +
 
 +
앞쪽의 도메인이나, 경로가 변경되어도 자동으로 잡아주어 편리하다.
 +
|-
 +
|태그 사용(이름공간 사용)
 +
|<syntaxhighlight lang="html+django">
 +
<a href = "{% url '이름공간:인덱스' 넘길변수%}">나타낼내용</a>
 +
</syntaxhighlight>앱 안의 urls.py에서 지정한 appname변수를 이름공간으로 사용하고, name 속성을 인덱스로 사용하여 연결한다.
 +
 
 +
각 앱에서 인덱스가 겹치는 것을 방지할 수 있다.
 +
|}
 
==정적 파일 불러오기==
 
==정적 파일 불러오기==
 
{| class="wikitable"
 
{| class="wikitable"
85번째 줄: 112번째 줄:  
|}
 
|}
   −
= 조건문 =
+
== 조건문 ==
 
탬플릿 내에서 조건문과 분기문을 사용할 수 있다.
 
탬플릿 내에서 조건문과 분기문을 사용할 수 있다.
 +
 +
사용할 수 있는 불린연산자는 다음과 같다. <code>and, or, not, and not, ==, !=, <, >, <=, >=, in, not in</code>
    
===분기문===
 
===분기문===
 +
in 구문과 비교연산자도 그대로 사용 가능하다.
 
{| class="wikitable"
 
{| class="wikitable"
 
!형태
 
!형태
97번째 줄: 127번째 줄:  
|객체가 있는지 확인, 있으면 endif 사이의 문장을 보여준다.
 
|객체가 있는지 확인, 있으면 endif 사이의 문장을 보여준다.
 
ex) {% if question_list %} 는 question_list가 있을 때 하위의 명령을 실행하라는 의미.
 
ex) {% if question_list %} 는 question_list가 있을 때 하위의 명령을 실행하라는 의미.
 +
 +
      103번째 줄: 135번째 줄:  
{% endif %}로 닫아주어야 함에 유의.
 
{% endif %}로 닫아주어야 함에 유의.
 
|{% if 객체 %}
 
|{% if 객체 %}
 +
....
 
{% endif %}
 
{% endif %}
 
|-
 
|-
 
|여러 조건 넣기
 
|여러 조건 넣기
 
|조건에 해당하는 부분 사이의 문장을 보여준다.
 
|조건에 해당하는 부분 사이의 문장을 보여준다.
|{% if 조건문1 %}
+
|<syntaxhighlight lang="html+django">
{% elif 조건문2 %}
+
{% if 조건문1 %}
 
+
    명령
{% else %}
+
{% elif 조건문2 %}
 
+
    명령
{% endif %}
+
{% else %}
 +
    명령
 +
{% endif %}
 +
</syntaxhighlight>
 
|}
 
|}
 
===반복문===
 
===반복문===
122번째 줄: 158번째 줄:  
{% endfor %}
 
{% endfor %}
 
|파이썬의 문법과 다를 건 거의 없다.
 
|파이썬의 문법과 다를 건 거의 없다.
사용할 수 있는 불린연산자는 다음과 같다. <code>and, or, not, and not, ==, !=, <, >, <=, >=, in, not in</code>
   
|-
 
|-
 
|{% if not forloop.last %}
 
|{% if not forloop.last %}
 
|for문의 마지막인지 아닌지 여부를 담는 변수 등이 있다.
 
|for문의 마지막인지 아닌지 여부를 담는 변수 등이 있다.
(세거나 그런 것들이...)
+
(세거나 그런 것들이...) for문 안에 넣어서 사용한다.
 +
|-
 +
|{% for key, value in 사전.items %}
 +
<nowiki>{{key}}</nowiki> : <nowiki>{{value}}</nowiki>
 +
 
 +
{% endfor %}
 +
|사전 안에 든 것은 .items를 붙여주어야 한다.
 +
리스트 안에 담긴 변수들을 각각 꺼내어 사용할 수도 있다.
 +
|}
 +
 
 +
==== 루프세트 ====
 +
for문 안에서 사용할 수 있는 기능들.
 +
{| class="wikitable"
 +
!기능
 +
!태그
 +
|-
 +
|for문 안에서 몇 번째 루프인지를 1번부터 세어준다.
 +
|<nowiki>{{forloop.counter}}</nowiki>
 +
|-
 +
|for문 안에서 몇 번째 루프인지를 0번부터 세어준다.
 +
|<nowiki>{{forloop.counter0}}</nowiki>
 +
|-
 +
|거꾸로 카운팅해준다. 1까지 세어준다.
 +
|<nowiki>{{forloop.revcounter}}</nowiki>
 +
|-
 +
|거꾸로 카운팅해준다. 마지막값이 0이 되게끔 카운팅.
 +
|<nowiki>{{forloop.revcounter0}}</nowiki>
 +
|}
 +
 
 +
== 변수 선언 ==
 +
변수를 view로부터 받기도 하지만, 직접 선언할 수도 있다.
 +
 
 +
굳이 탬플릿 내에서 변수를 설정할 필요가 있을까 싶긴 하다; 가능한 데이터는 뷰 내에서 다루어야 프론트 개발자와의 업무분장이 쉬워질 듯한데..
 +
{| class="wikitable"
 +
!태그
 +
!기능
 +
!응용
 +
|-
 +
|{% with 변수='값' %}
 +
{% endwith %}
 +
|변수와 값을 설정한다.
 +
|태그 사이에서 <nowiki>{{변수}}</nowiki> 형태로 기입한다.
 
|}
 
|}
forloop.counter 등 정리해보자.
      
== 기타 ==
 
== 기타 ==
142번째 줄: 217번째 줄:  
|}
 
|}
    +
=== 기타 ===
 +
{| class="wikitable"
 +
!태그
 +
!기능
 +
|-
 +
|{# 내용 #}
 +
|내용을 주석 처리한다. html주석 안에 탬플릿태그를 넣으면 이조차 데이터로 취급하니, 가끔 쓰일 때가 있다.
 +
|}
    
[[분류:장고 탬플릿]]
 
[[분류:장고 탬플릿]]

둘러보기 메뉴