twitter bootstrap - Django template render each form field based on criteria -


i'm using django 1.7 bootstrap 3 , want render each form field same way, best utilizing bootstrap has-error fields:

<div class="form-group {% if form.field.errors %}has-error has-feedback{% endif %}">     <label class="control-label" for="field">{{ form.field.help_text }}</label>      <div class="input-group">         <span class="input-group-addon"><span class="some-icon"></span></span>         {% render_field form.field class+="form-control" placeholder=form.field.label id="end-date" aria-describedby="inputerror2status" %}     </div>     <label class="control-label" for="field">{{ form.field.errors.as_text }}</label> </div> 

as can see, moment number of fields increase becomes lot of work, not write it, maintain , refactoring becomes hell... not dry. each field need change form.field variables , id="field" , icon

how write function, templatetag or else make django render fields in form way? possible this? awesome if form in django have setting accept optionalglypycon class renderer use render icon.

-- edit --

as indicated @serafeim django-crispy-forms solution. how use crispy-forms produce above html?

-- edit 2 --

after reading on crispy-forms managed come following solution: forms.py file looks this:

class createform(forms.modelform):     def __init__(self, *args, **kwargs):         super(createform, self).__init__(*args, **kwargs)         self.helper = formhelper()         self.helper.form_method = 'post'         self.helper.form_action = 'submit'         self.helper.add_input(submit('submit', 'submit'))         self.helper.html5_required = true         self.helper.layout = layout(             prependedtext('fielda', '<span class="fa fa-calendar"></span>', placeholder="yyyy-mm-dd"),             prependedtext('fieldb', '<span class="fa fa-clock-o"></span>', placeholder="0:00:00 (h:m:s)"),         'fieldc')      fielda = forms.datefield(required=true)     fieldb = fdurationfield(required=true)     fieldc = forms.charfield(widget=forms.textarea(attrs={'rows':3}), required=false, max_length=128)      class meta:         model = amodel         exclude = ('fieldd', 'fielde', 'fieldf', 'fieldg') 

and in template have call {% crispy form %} better initial version. however, still feel have repeat steps, adding fields layout... possible reduce code further?

it awesome if form in django have setting accept optional glypycon class renderer use render icon.

forms collection of fields. field combination of widget (which control html rendered) , validation rules.

to control rendered on page, you'd modify widget.

for example, if want specify css class or placeholder, @ widget level:

email = forms.emailfield(label='email address',                          required=false,                          widget=forms.textinput(attrs={'class': 'form-control',                                                        'placeholder': 'user@example.com'})) 

you can create own custom widgets , fields , obtain fine control on how forms rendered; asking absolutely possible; repeated, django-crispy-forms has become defacto standard way of getting done.


Comments

Popular posts from this blog

java - Plugin org.apache.maven.plugins:maven-install-plugin:2.4 or one of its dependencies could not be resolved -

Round ImageView Android -

How can I utilize Yahoo Weather API in android -