Django无法以表格格式呈现表单

时间:2015-07-30 19:02:05

标签: html django django-forms django-templates

我有一个django formset,我试图逐行渲染它。相反,表单是逐列渲染(如垂直形式而不是水平)。我正在使用django的form.as_table但它仍然无法正确呈现。任何想法?

form.html:

<form id="formset" class="original" action="{% url 'inventory:requests' inventory.id %}" method="post">{% csrf_token %} 
<!-- <a href="#" id="insert-more"> Add New Row </a> -->
    {{formset.management_form}}
        {% for form in formset.forms %}

            {{ form.non_field_errors }}
            {{ form.errors}}
            <div class='item'>

            <table>{{ form.as_table }}</table>
              <p style=""><a class="delete" href="#">Delete</a></p>

            </div>

        {% endfor %}

        <p><a id="add" href="#">Add another item</a></p>

        <input type="submit" name="submit" value="Request Blocks" id="submitButton">

</form>

1 个答案:

答案 0 :(得分:1)

表单的as_table方法仅使用<tr></td>代替<div>来呈现您的表单 - 但它将以相同的方式呈现在视觉上。

要轻松控制表单,请考虑使用django-crispy-forms。以下是如何使表单水平渲染:

forms.py中,添加此内容(除了正常代码外):

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit

class ExampleFormSetHelper(FormHelper):
    def __init__(self, *args, **kwargs):
        super(ExampleFormSetHelper, self).__init__(*args, **kwargs)
        self.form_method = 'post'
        self.render_required_fields = True
        self.template = 'bootstrap/table_inline_formset.html'
        self.add_input(Submit("submit", "Save")) 

接下来,在views.py

from .forms import ExampleFormsetHelper, YourFormSet

def formset_view(request):
    formset = YourFormSet()
    helper = ExampleFormSetHelper()
    return render(request, 'template.html',
                 {'formset': formset, 'helper': helper})

最后,在您的模板中,您只需要:

{% load crispy_forms_tags %}
{% crispy formset helper %}

有关详细信息,documentation具有详细信息。