循环遍历Django模板中数据库行中的字段

时间:2015-10-20 08:55:11

标签: python django loops

我是Django的新手(1.8,Python 3),我正试图用它构建一个小网站。

[为了简单起见,我将我的情况改为想象中的书店]

我想要完成的是以下内容:想象我有一个模型(如果你愿意的话,数据库表)包含一堆书籍数据。我想向用户显示数据。但我很懒,而且我不想指定模板中的每个字段。我想要一个循环,自动循环遍历特定书籍的每个字段,并显示详细名称和数据。

我目前所取得的成就是,我可以在我的观看中访问模板中的数据:

book = Book.objects.get(id=book_id)

url注入book_id(例如site / book / 1)。 所以,现在我可以访问模板中的每个字段,例如{{book.name}}或{{book.author}}。但是,为每个领域添加一个html段落需要大量的手工工作。

但是,我希望在我的模板中有这样的东西(只是一个例子,不一定要那样):

{% for field in book %}:
    {{ field.verbose_name }} {{ field.data }}
{% endfor %}

但只是用我当前的当前.get(id = book_id)来做这件事并不起作用。而且,我也无法访问详细的名称。

此外,如果解决方案也适用于关系,那将是非常好的,例如:

{% for field in book.author %}:
    {{ field.verbose_name }} {{ field.data }}
{% endfor %}

显示当前所选图书的作者表的所有数据。

无论如何,我希望我的解释清楚。在提出明确的问题时我并不是那么好:(

谢谢!

1 个答案:

答案 0 :(得分:3)

现在是的,您可以滥用meta来获取verbose_name但是与此数据没有任何关联

{% for field in book._meta.fields %}
    {{ field.verbose_name }} 
{% endfor %}

我不确定这是多么正确,因为Pep8警告常常出现在meta标签周围(我无法从模板方面看到这一点)

我建议您考虑使用values

作为一个小例子,这将给你一个你可以迭代的字典(这个例子给出了id和名字)

Book.objects.filter(id=book_id).values('id', 'name')[0]
{% for key, val in book_fields %}
    {{ key }} {{ val }}
{% endfor %}

更好的方法是你只得到你真正关心的字段(id对每个人都没有太大帮助)

如果你遗漏了值中的字段,那么你确实得到了所有这些字段,但我不确定它是否是使用的详细名称

Book.objects.filter(id=book_id).values()[0]