일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
- intell
- 타코트론
- 놀이동산의슈퍼컴퓨터를작동시켜라
- 인하대학교
- CrossAngle
- 서버로그
- 우분투비트확인
- 노트북덮개
- Xangle
- 개발자를위한파이썬
- 한빛미디어
- 프로그라피
- tacotron
- 인하멘토링
- 서구동구예비군훈련장
- 나는리뷰어다
- 봉사활동
- 쇠막대기
- 프로그래머스
- 심플소프트웨어
- 로그남기기
- machinelearning
- 개발자회고
- texttospeech
- 인천남중
- jaypark.dating
- 2019회고
- 결과를얻는법
- 신영준
- graphicdriver
- Today
- Total
jc.jang
8강 Form Template Custom Render 본문
주제
-
각 Form 객체는 웹브라우저 유저 노출을 위해 HTML 포맷으로 표현되어야한다. 이를 Render라 한다.
-
그런데 장고의 기본 Renderer는 조금 어글리하여 커스텀하는 방법에 대해 알아보자.
노트
-
myapp/models.py
class Post(models.Model):
title = models.CharField(max_length=100, validators=[MinLengthValidator(3)],
help_text='글 제목입니다. 100자 이내로 입력해주세요.')
content = models.TextField(help_text='글 내용입니다. 에디터를 이용하여 자유롭게 작성해주세요.')
user_agent = models.CharField(max_length=200)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def get_absolute_url(self):
return reverse("post_detail", args=[self.pk])
def __str__(self):
return self.title
-
Post 모델 정의
-
myapp/forms.py
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = '__all__'
widgets = {
'user_agent': forms.HiddenInput,
}
-
PostForm 모델폼 정의
-
기본 스타일로 렌더링하는 방법들 (공식 문서 링크)
-
Form 기본 제공 HTML Render
-
{{ form.as_table }}
-
{{ form.as_p }}
-
{{ form.as_ul }}
-
필드를 수동으로 렌더링하기
-
각 필드는 {{ form.name_of_field }}와 같이 가져와서 속성처럼 사용할 수 있다.
{{ form.non_field_errors }}
<div class="fieldWrapper">
{{ form.subject.errors }}
<label for="{{ form.subject.id_for_label }}">Email subject:</label>
{{ form.subject }}
</div>
<div class="fieldWrapper">
{{ form.message.errors }}
<label for="{{ form.message.id_for_label }}">Your message:</label>
{{ form.message }}
</div>
<div class="fieldWrapper">
{{ form.sender.errors }}
<label for="{{ form.sender.id_for_label }}">Your email address:</label>
{{ form.sender }}
</div>
<div class="fieldWrapper">
{{ form.cc_myself.errors }}
<label for="{{ form.cc_myself.id_for_label }}">CC yourself?</label>
{{ form.cc_myself }}
</div>
-
첫번째 div 태그의 fieldWrapper class에 대해서 살펴 보면 form.subject로 subject 필드를 가져왔고 errors, id_for_label, subject로 해당 속성들을 렌더링했다.
-
에러 메세지 렌더링하기
{% for error in form.non_field_erros %}
{{ error }}
{% endfor %}
{% for field in form.hidden_fields %}
{{ field }}
{% endfor %}
{% for field in form.visible_fields %}
{{ field.label_tag }}
{{ field }}
{{ field.help_text }}
{% for error in field.errors %}
{{ error }}
{% endfor %}
{% endfor %}
-
non_field_error의 경우 최상단에 노출한다.
-
그 다음 hidden 필드와 visible 필드를 구분해서 렌더링한다.
-
조금 더 스타일링하기 django-bootstrap4(링크)
-
pip install django-bootstrap4
-
INSTALLED_APPS에 'bootstrap4' 추가
-
템플릿에서 사용 시 {% load bootstrap4 %}를 반드시 로드해야 함
-
나는 bower로 static 파일 관리하는게 나을 것 같다고 봄
-
그리고 프론트엔드와 백엔드를 나눠서 개발하는 추세인데 굳이 풀스택 프레임워크로 할 이유가 없는 것 같다.
-
그냥 장고 공부하면서 드는 생각...
'Django > Django - Form,ModelForm' 카테고리의 다른 글
10강 11강 (0) | 2019.10.05 |
---|---|
9강 Messages Framework (0) | 2019.10.04 |
7장 Widget Overview (0) | 2019.09.25 |
6강 Form Validation (0) | 2019.09.25 |
5강 ModelForm (0) | 2019.09.24 |