簡體   English   中英

循環遍歷Django模板中數據庫行中的字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM