폼을 템플릿으로 가져오기 위해서 해야할 모든것은, 폼 인스턴스를 템플릿 컨텍스트에 넣어주는것입니다.
폼인스턴스 생성
템플릿 컨텍스트에 넣기
1
| return render(request, form.html, {'form': form})
|
템플릿 컨텍스트에 넣어진 컨텍스트 즉, {'form': form}
은, 해당 템플릿 페이지에서, 아래와 같이 사용될수 있습니다.
이렇게 하면, 템플릿에서 적절하게 label 과 input 요소들을 렌더해줄수 있습니다.
추가해야할 폼 템플릿 요소들
폼의 출력은 <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>
|