[英]Loop over fields in a database row in Django template
我是Django的新手(1.8,Python 3),我正在嘗試用它構建一個小網站。
[為了簡單起見,我把我的情況改成了想象中的書店]
我想要完成的是以下內容:想象我有一個模型(如果你願意的話,數據庫表)包含一堆書籍數據。 我想向用戶顯示數據。 但我很懶,我不想指定模板中的每個字段。 我想要一個循環,自動循環遍歷特定書籍的每個字段,並顯示詳細的名稱和數據。
我目前所取得的成就是,我可以通過在我的視圖中訪問我的模板中的數據:
book = Book.objects.get(id=book_id)
其中book_id由url注入(例如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 %}
其中顯示當前所選書籍的作者表的所有數據。
無論如何,我希望我的解釋清楚。 在問清楚的問題時,我真的不是很好:(
謝謝!
現在是的,您可以濫用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.