바뀜
둘러보기로 가기
검색하러 가기
58번째 줄:
58번째 줄:
− +
+
+
+
+
+
+
+
+
+
+
+
71번째 줄:
82번째 줄:
+
+
+
+
+
+
+
+
+
+
+
→메타클래스
===위젯===
===위젯===
각 폼 필드는 <input type='text'>와 같은 HTML 위젯을 갖고 있다. 각 폼필드마다 기본적인 위젯을 갖고 있다.
각 폼 필드는 <input type='text'>와 같은 HTML 위젯을 갖고 있다.
자동으로 태그로 감싸주기 때문에 탬플릿에서 편집이 안된다. 이렇게 되면 디자인측면에서 제약이 생기게 되는데.. 개개 입력칸을 편집하기 위해선 form의 수정이 필요하다.
각 폼필드마다 기본적인 위젯을 갖고 있다.
폼필드 안의 옵션에 속성=forms.CharFiedl(....., widget={'class'='클래스값', ...}) 와 같이 옵션을 추가해주면 된다.(역시, HTML에서 입력할 수 있기 때문에 분업을 하는 경우 굳이 사용하진 않는다.)
폼필드 안의 옵션에 속성=forms.CharFiedl(....., widget={'class'='클래스값', ...}) 와 같이 옵션을 추가해주면 된다.(역시, HTML에서 입력할 수 있기 때문에 분업을 하는 경우 굳이 사용하진 않는다.)
그런데, 위처럼 작업하면 디자이너가 .py를 만져야 한다는 점에서 디자이너와 개발자간 역할분리가 흐려지기도 한다는 단점이 있다. 이를 탬플릿에서 직접 다루기 위해선 다시 widgets 속성을 없애고, 탬플릿을 수정해준다. 다음과 같은 형식으로 폼 내부의 속성에 접근할 수 있고, 이들을 html에서 직접 편집할 수 있다.<syntaxhighlight lang="html">
<label for="subject">제목</label>
<input type="text" class="form-control" name="subject" id="subject"
value="{{ form.subject.value|default_if_none:'' }}">
</syntaxhighlight><nowiki>{{form.subject}}</nowiki>로 접근할 수 있지만, <nowiki>{{form.subject.value}}</nowiki>를 써준 것은, 에러가 나고 페이지를 새로 불러들일 때 기존 입력값을 보존하기 위함이다.
<nowiki>|</nowiki>default_if_none:<nowiki>''</nowiki> 은 값을 쓰지 않았을 때 <nowiki>''</nowiki>를 담아주기 위한 것. 초기값을 지정할 수도 있다.(이걸 지정하지 않으면 입력하지 않은 값들에 'none'이라는 문자열이 담겨 꼴이 우스워진다)
== 메타클래스 ==
== 메타클래스 ==
'subject': '제목',
'subject': '제목',
'content': '내용',
'content': '내용',
}
</syntaxhighlight>
=== 위젯 ===
필드에서 위젯을 다룰 수도 있지만 메타클래스를 통해 위젯을 다룰 수도 있다. <syntaxhighlight lang="python">
class QuestionForm(forms.ModelForm):#모델폼 상속
class Meta:
widgets = { #이 속성의 추가로 입력항목에 부트스트랩의 클래스를 추가해 넣을 수 있다.
'subject': forms.TextInput(attrs={'class': 'form-control'}),
'content': forms.Textarea(attrs={'class': 'form-control', 'rows': 10}),
}
}
</syntaxhighlight>
</syntaxhighlight>