2012-12-19 5 views
1

난 그냥 바삭 양식을 사용하기 시작했고 나는 형태가 설명되는 방법이 불규칙 나타났습니다 그리고장고 바삭한 형태 __init__

, 레이아웃 GitHub의에서 example에서 길 아래에 어떤 영향을 미칠 것입니다 에

class MessageForm(forms.Form): 

    [...] 

    # Uni-form 
    helper = FormHelper() 
    helper.form_class = 'form-horizontal' 
    helper.layout = Layout(
     Field('text_input', css_class='input-xlarge'), 
     Field('textarea', rows="3", css_class='input-xlarge'), 
     'radio_buttons', 
     Field('checkboxes', style="background: #FAFAFA; padding: 10px;"), 
     AppendedText('appended_text', '.00'), 
     PrependedText('prepended_text', '<input type="checkbox" checked="checked" value="" id="" name="">', active=True), 
     PrependedText('prepended_text_two', '@'), 
     'multicolon_select', 
     FormActions(
      Submit('save_changes', 'Save changes', css_class="btn-primary"), 
      Submit('cancel', 'Cancel'), 
     ) 
    ) 

그리고 부분 다음과 같이 설명되어 자신의 내가의 사용을보고 혼란 스러워요 documentations

class ExampleForm(forms.Form): 
    [...] 
    def __init__(self, *args, **kwargs): 
     self.helper = FormHelper() 
     self.helper.layout = Layout(
      Fieldset(
       'first arg is the legend of the fieldset', 
       'like_website', 
       'favorite_number', 
       'favorite_color', 
       'favorite_food', 
       'notes' 
      ), 
      ButtonHolder(
       Submit('submit', 'Submit', css_class='button white') 
      ) 
     ) 
     super(ExampleForm, self).__init__(*args, **kwargs) 

문서 안의 예제 라인. 왜 첫 번째 예제에 표시된 방법을 사용하여 양식을 간단하게 정의 할 수있을 때 사용하십시오. 그 (것)들 어떤 이득 또는 단점이있을 것입니까?

답변

0

__init__ 메서드를 사용하면 렌더링 할 때까지 양식 내용을 기반으로 도우미 (표시/숨기기 버튼)를 수정할 수 있습니다.

개인적으로 유연성을 유지하고 도우미 계산을 줄이기 위해 속성 속성에 넣습니다.

이렇게하면 어린이 양식에 대해 자연스럽게 독립적 인 도우미를 가질 수 있습니다.

정적 도우미가있는 단일 양식을 처리하는 간단한 방법으로 위의 방법이 유용합니다. 그렇지 않으면 위험 할 수 있습니다.

나는 좀 더 확장 된 형태의 API를 같은 느낌 할 수 있도록 주어진 특성과 믹스 인을 사용

class MyFormMixin 
    @property 
    def helper(self): 
     helper = FormHelper() 

     if hasattr(self, "parent_url"): 
      back = layout.Button('back', 'Return button text') 
      back.field_classes += ' primaryAction' 
      helper.add_input(back) 

     reset = layout.Reset('reset', 'undo') 
     reset.field_classes += ' primaryAction' 
     helper.add_input(reset) 

     submit = layout.Submit('submit', 'Valider (here in french)') 
     submit.field_classes += ' primaryAction' 
     helper.add_input(submit) 

     helper.form_method = 'POST' 
     if hasattr(self, "action_url"): 
      helper.form_action = self.action_url 

     if hasattr(self, "form_style"): 
      helper.form_style = self.form_style 

     if hasattr(self, "form_layout"): 
      fs=[] 
      for name, fields in self.form_layout.iteritems(): 
       fs.append(layout.Fieldset(name, *fields)) 
      helper.add_layout(layout.Layout(*fs)) 
     else: 
      helper.add_layout(layout.Layout(layout.Fieldset("",*self.fields.keys()))) 
     return helper 

self.helper 너무 일을 할 수도 설정된 __init__ 방법. (그러나 언젠가는 렌더링없이 간단한 유효성 검사를 위해 폼을 사용합니다. 그래서 속성에 설정했습니다).

희망이 도움이되었습니다.