2010-02-10 37 views
10

Cách Django trình bày một tập hợp theo chiều ngang, tức là một hàng trên một biểu mẫu? Phương thức as_table tạo ra nhiều biểu mẫu theo chiều dọc (với các nhãn). Tôi cần các trường biểu mẫu trong các hàng trong bảng (một hàng trên mỗi biểu mẫu) và các nhãn phải ở trên cùng. Tôi không thấy gì ngoài hộp. Điều này có được khuyến khích vì một lý do nào đó không?Hình thức ngang (mỗi hàng) trong một biểu mẫu Django

Tôi nên làm rõ rằng tôi thực sự muốn một bảng, vì tiện ích bảng giao diện người dùng tôi sẽ sử dụng. Và bảng đó sẽ có các nhãn trong.

Vì vậy, cấu trúc mong muốn của tôi là:

<table> 
    <thead> 
    <tr><th>column1</th><th>column2</th></tr> 
    </thead> 
    <tbody> 
    <tr><td>form1.value1</td><td>form1.value2</td></tr> 
... 
    </tbody> 
</table> 

Trả lời

21

Bạn có thể muốn thử một cái gì đó như thế này http://www.djangosnippets.org/snippets/1442/

{{ formset.non_form_errors.as_ul }} 
<table id="formset" class="form"> 
{% for form in formset.forms %} 
    {% if forloop.first %} 
    <thead><tr> 
    {% for field in form.visible_fields %} 
    <th>{{ field.label|capfirst }}</th> 
    {% endfor %} 
    </tr></thead> 
    {% endif %} 
    <tr class="{% cycle row1,row2 %}"> 
    {% for field in form.visible_fields %} 
    <td> 
    {# Include the hidden fields in the form #} 
    {% if forloop.first %} 
     {% for hidden in form.hidden_fields %} 
     {{ hidden }} 
     {% endfor %} 
    {% endif %} 
     {{ field.errors.as_ul }} 
     {{ field }} 
    </td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
</table> 
+5

Có, điều này có tác dụng. Đó là một điều dài dòng để đưa vào các mẫu của bạn. Với một cái gì đó quá chi tiết, bạn muốn nó hoặc là một phương thức as_table giống như hoặc bạn muốn có khả năng gọi các mẫu với một tham số (không chỉ bao gồm chúng). Tôi thực sự ngạc nhiên rằng một cái gì đó như trưởng thành như Django không có này ra khỏi hộp. – kmt

+4

Tôi thường thêm mẫu này dưới dạng mẫu chung (được lưu dưới dạng formset_table.html), sau đó cho từng mẫu biểu mẫu, tôi chuyển {% include "formset_table.html"%}, nhưng tôi đồng ý rằng nó có thể được hiển thị dưới dạng phương thức dựng sẵn . – Dave

+2

Tôi đã làm như vậy. Và bởi vì tôi có một trang với nhiều biểu mẫu như vậy, tôi đã kết thúc bằng cách sử dụng thẻ có để tham số hóa nó. – kmt

6

tôi đề nghị sử dụng form.as_ul và phong cách nó với CSS của bạn để làm cho nó tất cả trên một hàng. Bạn có thể làm điều đó với ul li { display: inline; } hoặc tất nhiên, thay thế một lớp hoặc ID nếu bạn không muốn ảnh hưởng đến tất cả UL theo cách đó.

Dưới đây là phần có liên quan của các tài liệu Django: http://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template

Edit: Để giải quyết nhu cầu của bạn cho một bảng, bạn muốn muốn làm một cái gì đó như thế này ... thay đổi nội dung một số chi tiết.

Rất khó để đặt tất cả các biểu mẫu này trong một bảng và vẫn có HTML hợp lệ. Phần tử biểu mẫu có thể bao quanh một bảng hoặc nằm trong một <td> ... mặc dù điều này có thể vẫn hoạt động.

<thead> 
    <tr> 
    {% for field in form %} 
    <th>{{ field.label }}</th> 
    {% endfor %} 
    </tr> 
</thead> 

<tbody> 
<tr class="table_row"> 
    <form action="/something/" method="post"> 
    {% for field in form %} 
     <td> 
     <table> 
     <tr><td>{{ field.label }}</td></tr> 
     <tr><td>{{ field }}</td></tr> 
     </table> 
     </td> 
    {% endfor %} 
    </form> 
    </tr> 
</tbody> 
+0

Xem rõ tôi xin vui lòng. Tôi thực sự * cần * một cái bàn. – kmt

+0

Tôi nghĩ rằng bạn sẽ phải đi với các tùy chỉnh trong mẫu của bạn, sau đó, thay vì sử dụng các phương pháp tự động tạo HTML. Sau đó, bạn có thể đặt tất cả trong một ' '. – JAL

+0

Tôi thấy cập nhật của bạn. Cảm ơn! Nhưng, tốt, tôi cần các nhãn để ở trong các , trên tất cả các hàng, không lặp lại cho mỗi hàng riêng lẻ. Tôi về cơ bản cần một bảng biểu diễn của một recordset. Tìm thấy nó đáng ngạc nhiên rằng tôi không thể tìm thấy điều này googling. – kmt

Các vấn đề liên quan