【发布时间】:2012-01-18 10:51:34
【问题描述】:
我正在使用Twitter Bootstrap 和 Django 来呈现表单。
Bootstrap 可以很好地格式化您的表单 - 只要您有它期望包含的 CSS 类。
但是,我的问题是 Django 的 {{ 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>
但是,在 Django 中为每个表单字段添加自定义 CSS 标签是相当痛苦的:
Add class to Django label_tag() output
有没有更聪明的方法来使用{{ form.as_p }},或者遍历字段,而无需手动指定事物,或者做一大堆hacky?
干杯, 维克多
【问题讨论】:
-
您可以查看django-bootstrap-form 和/或django-bootstrap 请告诉我们您最终使用的是哪一个以及为什么!
-
django-bootstrap-form 目前的功能似乎很轻。不过,django-bootstrap 非常有前途,据我所知,它正在为 django 使用正确的方法。这绝对值得贡献。
标签: css django twitter-bootstrap