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

0%

Django Forms 13편 - 폼 템플릿 작업하기-1

Working with form templates


폼을 템플릿으로 가져오기 위해서 해야할 모든것은, 폼 인스턴스를 템플릿 컨텍스트에 넣어주는것입니다.



  1. 폼인스턴스 생성

    1
    2
    # views.py 에서 
    form = NameForm()
  2. 템플릿 컨텍스트에 넣기

    1
    return render(request, form.html, {'form': form})

템플릿 컨텍스트에 넣어진 컨텍스트 즉, {'form': form} 은, 해당 템플릿 페이지에서, 아래와 같이 사용될수 있습니다.


1
{{ form }}

이렇게 하면, 템플릿에서 적절하게 label 과 input 요소들을 렌더해줄수 있습니다.



Form rendering options


추가해야할 폼 템플릿 요소들

폼의 출력은 <form> 테그 혹은 폼의 제출 약식들을 포함하지 않는다는것을 잊지 마세요.

<form> 태그와 <submit> 태그 같은것들은 여러분들이 스스로 넣어줘야 합니다.


Django 에서 Form 을 템플릿에 렌더할때에, 옵션을 붙여서 폼의 출력 형태를 바꾸어 줄수 있습니다.


1
2
3
{{ form.as_table }} <tr> 테그로 감싸진 테이블로 폼을 렌더해줍니다 
{{ form.as_p }} <p> 테그로 감싸진 폼을 렌더해 줍니다
{{ form.as_ul }} <ul> 태그로 감싸진 폼을 렌더해 줍니다

form.as_table 과 form.as_ul 같은 경우, 상위 태그인 <table> 과, <ul> 요소들을 여러분들 스스로 작성하고 감싸주어야 합니다.



예제


아주 간단한 폼을 템플릿에 렌더해 보면,



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# forms.py 

from django import forms

class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField(widget=forms.Textarea)
sender = forms.EmailField()
cc_mysself = forms.BooleanField(required=False)

# views.py
def form_render(request):
form = ContactForm()
return render(request, 'form.html', {'form': form})


# form.html 에서 {{ form.as_p }} 로 렌더를 해보면,
# 아래처럼 html 태그가 생성됩니다.

<p><label for="id_subject">Subject:</label>
<input id="id_subject" type="text" name="subject" maxlength="100" required></p>
<p><label for="id_message">Message:</label>
<textarea name="message" id="id_message" required></textarea></p>
<p><label for="id_sender">Sender:</label>
<input type="email" name="sender" id="id_sender" required></p>
<p><label for="id_cc_myself">Cc myself:</label>
<input type="checkbox" name="cc_myself" id="id_cc_myself"></p>