2010-02-10 8 views
10

Jaki jest sposób prezentacji formularza w Django w poziomie, tj. Jeden wiersz w jednym formularzu? Metoda as_table generuje wiele formularzy w pionie (z etykietami). Potrzebuję pól formularza w wierszach tabeli (jeden wiersz na formularz), a etykiety powinny znajdować się na górze. Nie widzę niczego po wyjęciu z pudełka. Czy to zniechęca z jakiegoś powodu?Formularze poziome (na wiersz) w zestawie Django

Muszę wyjaśnić, że faktycznie chce tabeli, ze względu na widget tabeli interfejsu użytkownika będę używać. I ten stół powinien mieć etykiety w.

Więc moja pożądana struktura jest następująca:

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

Odpowiedz

21

Może chcesz spróbować czegoś jak ten 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

Tak, to robi. Wstawianie szablonów jest bardzo szczegółowe. W przypadku czegoś tak gadatliwego, chciałbyś, aby była to metoda typu as_table-like lub chcesz mieć możliwość wywoływania szablonów za pomocą parametru (nie tylko ich uwzględniania). Jestem naprawdę zaskoczony, że coś tak dojrzałego, jak Django, nie ma tego po wyjęciu z pudełka. – kmt

+4

Zazwyczaj dodaje się to jako ogólny szablon (zapisany jako plik_setform.html), a następnie dla każdego szablonu formularza przekazuję {% include "zestaw_tablic.html"%}, ale zgadzam się, że byłoby miło z tego, że mogłoby być renderowane jako wbudowana metoda . – Dave

+2

Skończyło się na tym samym. A ponieważ mam stronę z wieloma takimi formularzami, w końcu użyłem tagu z parametrem do sparametryzowania. – kmt

6

Proponuję za pomocą form.as_ul i stylizacji go z CSS, aby to wszystko w jednym rzędzie. Możesz to zrobić za pomocą ul li { display: inline; } lub oczywiście zastąpić klasę lub ID, jeśli nie chcesz wpłynąć na wszystkie UL w ten sposób.

Oto odnośny fragment docs Django: http://docs.djangoproject.com/en/dev/topics/forms/#displaying-a-form-using-a-template

Edit: Aby rozwiązać zapotrzebowanie na stole, chcesz chcesz zrobić coś takiego ... edytowany trochę więcej.

Trudno umieścić wszystkie te formularze w tabeli i nadal mieć prawidłowy kod HTML. Element formularza może otaczać tabelę lub znajdować się wewnątrz obiektu <td> ... chociaż prawdopodobnie nadal będzie działać.

<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

Zobacz moje wyjaśnienia proszę. Właściwie * potrzebuję * stołu. – kmt

+0

Myślę, że będziesz musiał przejść z dostosowaniem w swoim szablonie, a następnie zamiast korzystać z metod, które automatycznie generują HTML. Wtedy możesz umieścić wszystko w jednym ''. – JAL

+0

Widzę twoją aktualizację. Dzięki! Ale, cóż, potrzebuję, aby etykiety były w wierszach , a przede wszystkim nie powtarzały się dla każdego pojedynczego wiersza. Po prostu potrzebuję reprezentacji tabeli zestawu rekordów. To zaskakujące, że nie mogłem znaleźć tego Google'a. – kmt

Powiązane problemy