Django, отобразить таблицу HTML из списка элементов словаря - PullRequest
3 голосов
/ 10 июня 2011

Я пишу систему очередей заказов с использованием django, и мне удалось выяснить, как получить входные данные из HTML-форм и сохранить их в базе данных sqlite, используя модели и формы.Чтобы прочитать данные из базы данных в список, я делаю что-то вроде

queueList = Order.objects.filter(orderDate__isnull=True)

(вывод html {{queueList}})

Где Order - это модель с несколькими атрибутами.Возвращенные данные выглядят примерно так:

[<Order: Name: Bob, Catalog #: 32, Vendor: vendor1, Site: Site1, Entered: 2011-06-06,     Ordered: None, Received: None, Ordered By: orderee1>, <Order: Name: Jeff, Catalog #: 333, Vendor: vendor2, Site: site2, Entered: 2011-06-06, Ordered: None, Received: None, Ordered By: orderee2>] 

Такое ощущение, что в django будет встроено что-то простое, чтобы отформатировать это как HTML-таблицу, наподобие form.as_table.Есть ли простой способ сделать это?Мне нужно отобразить 3 таблицы, сначала распечатывает каждый элемент словаря, у которого нет orderDate, второй - это каждый элемент, который имеет вид orderDate, но не получил receiveDate, а третий - это таблица, которая имеет все receiveDates.Должен ли я на самом деле нарезать все эти данные, чтобы построить таблицу?В сети я нашел какой-то код человека, который пробовал что-то подобное, но он выдавал исключения и был слишком сложным для меня, чтобы его исправить.

Ответы [ 2 ]

10 голосов
/ 10 июня 2011

Это звучит как что-то, что может быть легко решено с использованием языка шаблонов Django .

Итак, в вашем html-файле шаблона вы можете получить что-то вроде:

<table summary="no_orderDate">
<tr><th>Column 1</th><th>Column 2</th>
{% for queue in queueList %}
    {% if not queue.orderDate %}
        <tr><td>{{ queue.name }}</td><td>{{ queue.catalog_num }}</td></tr>
    {% endif %}
{% endfor %}
</table>

Возможно, вам потребуется проверить некоторые синтаксисы, но вы поняли идею.

2 голосов
/ 10 июня 2011

Если я правильно понимаю, вы хотите просто сбросить все поля без необходимости записывать вывод, как в ответе ZincX? Если это так, вы можете сделать что-то подобное ниже, однако, просто сделав это так, вы потеряете контроль над выходом.

# in models.py Order class
def get_fields(self):
    return [(field, field.value_to_string(self)) for field in Order._meta.fields]

# in template
<table>
{% for queue in queueList %}
    {% for field, value in queue.get_fields %}
        <tr>
            <th>{{ field }}</th>
            <td>{{ value }}</td>
        </tr>
    {% endfor %}
{% endfor %}
</table>
...