Я использую Twitter Bootstrap с Django для рендеринга форм.
Bootstrap
может довольно просто отформатировать ваши формы - при условии, что у вас есть классы CSS
, которые он ожидает включить.
Однако моя проблема в том, что формы, сгенерированные {{ form.as_p }}
Джанго, плохо отрисовываются с помощью Bootstrap, так как у них нет этих классов.
Например, вывод от Django:
<form class="horizontal-form" action="/contact/" method="post">
<div style='display:none'>
<input type='hidden' name='csrfmiddlewaretoken'
value='26c39ab41e38cf6061367750ea8c2ea8'/>
</div>
<p><label for="id_name">Name:</label> <input id="id_name" type="text" name="name" value="FOOBAR" maxlength="20" /></p>
<p><label for="id_directory">Directory:</label> <input id="id_directory" type="text" name="directory" value="FOOBAR" maxlength="60" /></p>
<p><label for="id_comment">Comment:</label> <textarea id="id_comment" rows="10" cols="40" name="comment">Lorem ipsum dolor sic amet.</textarea></p>
<p>
<label for="id_server">Server:</label>
<select name="server" id="id_server">
<option value="">---------</option>
<option value="1"
selected="selected">sydeqexcd01.au.db.com</option>
<option value="2">server1</option>
<option value="3">server2</option>
<option value="4">server3</option>
</select>
</p>
<input type="submit" value="Submit" />
</form>
Из того, что я могу сказать, Bootstrap требует, чтобы ваши формы имели <fieldset class="control-group">
, каждая <label>
имела class="control-label"
, икаждый <input>
заключен в <div>
:
<fieldset class="control-group">
<label class="control-label" for="input01">Text input</label>
<div class="controls">
<input type="text" class="xlarge" name="input01">
<p class="help-text">Help text here. Be sure to fill this out like so, or else!</p>
</div>
</fieldset>
Однако добавление пользовательских меток CSS в каждое поле формы в Django довольно болезненно:
Добавить класс в Djangolabel_tag () output
Есть ли более разумный способ использования {{ form.as_p }}
, или итерации по полям, без необходимости вручную что-либо указывать или выполнять целый набор хакерских действий?
Ура, Виктор