默认_form.as._p吐出:
<p><label for="id_subject">Subject:</label>
<input id="id_subject" type="text" name="subject" maxlength="100" /></p>
我需要
<p><label for="id_subject">Subject:</label><p>
<input id="id_subject" type="text" name="subject" maxlength="100" /></p>
标签和输入之间有间隔。如何修改我的Django代码呢?
答案 0 :(得分:34)
你只是不能再使用form.as_p
了。如果默认值不适合您,则必须手动渲染字段:
<form action="/contact/" method="post">
{% for field in form %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endfor %}
<p><input type="submit" value="Send message" /></p>
</form>
请参阅文档:https://docs.djangoproject.com/en/dev/topics/forms/#looping-over-the-form-s-fields
答案 1 :(得分:6)
覆盖表单类的as_p。
class MyForm(forms.Form):
def as_p(self):
"Returns this form rendered as HTML <p>s."
return self._html_output(
normal_row = u'<p%(html_class_attr)s>%(label)s</p> %(field)s%(help_text)s',
error_row = u'%s',
row_ender = '</p>',
help_text_html = u' <span class="helptext">%s</span>',
errors_on_separate_row = True)
答案 2 :(得分:5)
如果您只是需要休息,那么就不需要更改Django代码了。只需使用CSS将label
设置为display: block
。
答案 3 :(得分:1)
Brian上面描述的内容。我会为你的表单编写一个新方法,如as_myp。我为自己做了这个。我使用as_table方法并使as_plain删除了tr / th标记。实施例
class MyForm(forms.Form):
my_field1 = forms.CharField(...)
my_field2 = forms.WhateverField(...)
def as_myp(self):
"Returns this form rendered as HTML <p>s."
return self._html_output(
normal_row = '<p%(html_class_attr)s>%(label)s</p> <p>%(field)s%(help_text)s</p>',
error_row = '%s',
row_ender = '</p>',
help_text_html = ' <span class="helptext">%s</span>',
errors_on_separate_row = True)
def as_plain(self):
"Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
return self._html_output(
normal_row = '%(label)s%(errors)s%(field)s%(help_text)s',
error_row = '%s',
row_ender = ' ',
help_text_html = '<br /><span class="helptext">%s</span>',
errors_on_separate_row = False)
这似乎比编写模板文件和处理带有错误,标签,可见/隐藏等的表单字段渲染更容易。
答案 4 :(得分:-4)
模板:
<div id="my_form">
{{ form.as_p }}
</div>
CSS:
#my_form p label,
#my_form p input{
float: left;
clear: left;
}
因此,如果添加字段,您仍然可以使用form.as_p