编辑Django _form.as_p

时间:2011-10-14 15:20:32

标签: django django-forms

默认_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代码呢?

5 个答案:

答案 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