바뀜

1,918 바이트 추가됨 ,  2021년 6월 25일 (금) 14:26
58번째 줄: 58번째 줄:     
===위젯===
 
===위젯===
각 폼 필드는 <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'이라는 문자열이 담겨 꼴이 우스워진다)
 
== 메타클래스 ==
 
== 메타클래스 ==
   71번째 줄: 82번째 줄:  
             '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>
익명 사용자