我是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 %}
显示当前所选图书的作者表的所有数据。
无论如何,我希望我的解释清楚。在提出明确的问题时我并不是那么好:(
谢谢!
答案 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]