당신은 멋쟁이, 우리는 장고쟁이~

0%

Writing your first Django app, part3 - 5편

템플릿 시스템 사용하기


이전 포스팅에서 작성했던 detail() 뷰로 다시 돌아갑니다.


1
2
3
def detail(request, question_id):
question = get_object_or_404(Question, pk=question_id)
return render(request, 'polls/detail.html', {'question': question})

컨텍스트 변수 question 이 polls/html 로 전달이 되어 render 가 됩니다.


polls/templates/polls/detail.html 템플릿을 아래와 같이 고쳐줍니다.


1
2
3
4
5
6
<h1>{{ question.question_text }}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li>{{ choice.choice_text }}</li>
{% endfor %}
</ul>

템플릿 시스템은 변수의 속성들에 접근하기 위해서 . 을 찍어 조회를 하는, dot-lookup 형식을 사용합니다.


1
2
3
4
5
{{ question.question_text }} 에서 

첫번째로 django 는 question 객체에 대한 사전을 조회 합니다.

두번째로, . 뒤에 question_text 라는 속성값을 조회 합니다.


서버를 시작하고, 브라우저를 열어서** [**http://127.0.0.1:8000/polls/1/**](http://127.0.0.1:8000/polls/1/) **에 접속하면,**

아래와 같이 question 하나와, 해당 question에 있는 choice 들이 리스트 되어 있는것을 확인 할수 있습니다.




메서드의 호출



1
2
3
4
5
6
7
{% for choice in question.choice_set.all %}   
# question 에 붙어있는 선택들을 for 문으로 순회 시작

<li>{{ choice.choice_text }}</li>
# 순회 하는동안 <li> 태그 안에 하나씩 choice_text 들을 출력

{% endfor %} # for 문 종료


1
2
3
4
5
6
7
8
메써드의 호출은 {% for %} 반복문에서 이루어집니다. 

question.choice_set.all 은 파이썬 코드에서 question.choice_set.all() 로 해석이 됩니다.


question.choice_set.all() 은 순회가능한 Choice 객체들을 반환하고,

이것은 {% for %} 테그 안에서 사용하기 적합합니다.

마치며..



템플릿에 나오는 템플릿 언어의 구분이 많이 힘들었습니다.


1
2
3
4
{% for %}{{ question.choice_set.all }} 같은 템플릿 언어들 말입니다. 

{% %} 어떠한 로직들을 불러오는 코드라고 생각하고 (예 조건문, 반복문)
{{ }} 는 변수나 객체의 값들만 가지는 코드라고 이해하고 넘어갑니다.