2014-12-19 41 views
1

爲什麼不能正常工作? (Django 1.7和Django-crispy-forms 1.4.0)Django脆皮包裝全部不起作用

css類沒有被應用。

class ResourceForm(ModelForm): 

def __init__(self, *args, **kwargs): 
    super(ResourceForm, self).__init__(*args, **kwargs) 
    self.helper = FormHelper(self) 
    self.helper.layout = Layout() 
    self.helper.add_input(Submit('submit', 'Submit')) 
    self.helper.all().wrap(Field, css_class="col-xs-3 col-sm-4") 


class Meta: 
    model = Resource 
    fields = ['title', 
       '.... 

然後形式的HTML:

{% load crispy_forms_tags %} 

{% block content %} 
<div class="col-xs-12 col-sm-12 main_column"> 
    {% crispy form form.helper %} 
</div> 

{% endblock %} 

的形式生成的HTML看起來像這樣:

<form method="post" enctype="multipart/form-data"> 
    <input type='hidden' name='csrfmiddlewaretoken' value='blaahblahblah...' /> 
    <div id="div_id_title" class="form-group"> 
     <label for="id_title" class="control-label requiredField"> 
      Title<span class="asteriskField">*</span> 
     </label> 
     <div class="controls "> 
      <input class="textinput textInput form-control" id="id_title" maxlength="255" name="title" type="text" value="Foo" /> 
     </div> 
    </div> 
.... 
</form> 

也就是說,對於一個的ModelForm正常的HTML。 請注意,我使用的是forms.ModelForm,而不是forms.Form

+0

什麼HTML代碼,它目前產生?謝謝。 – alecxe

+0

我將添加生成的html到上面的問題。 –

+0

如果你用'FormHelper()'替換'FormHelper(self)'會怎麼樣? – alecxe

回答

4

當你調用FormHelper

self.helper = FormHelper(self) 

通過的形式,它automaticaly創建了所有領域的佈局包括像這樣(see the code):

def __init__(self, form=None): 
    self.attrs = {} 
    self.inputs = [] 

    if form is not None: 
     self.form = form 
     self.layout = self.build_default_layout(form)  

但是當你調用

self.helper.layout = Layout() 

你摧毀它。所以你沒有字段來包裝。

解決辦法:刪除行self.helper.layout = Layout()

+0

這是一個,謝謝@twil。 –

+0

這是答案,但文檔似乎與它完全相反。請參閱:http:// django-crispy-forms。 readthedocs.org/en/d-0/dynamic_layouts.html?highlight=wrap#all –

+0

嗯,你究竟看起來有什麼問題?看起來好。 – twil