2015-10-20 37 views
3

我是Django(1.8,Python 3)的新手,我試圖用它構建一個小網站。Django模板中的數據庫行中的字段循環

[爲了簡單起見,我改變了我的情況,以一個虛構的書店]

我想做到的是以下幾點:想象我有一個模型(數據庫表,如果你願意),其中包括的一堆書的數據。我想向用戶顯示數據。但我很懶,我不想指定模板中的每個字段。我想要一個循環,可以自動遍歷特定書籍的每個字段,並顯示詳細名稱和數據。

我目前已經完成了,是我可以在我的意見有這個訪問模板中的數據:

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

凡book_id通過URL注入(例如網站/書籍/ 1)。 因此,現在我可以訪問模板中的每個字段,例如{{book.name}}或{{book.author}}。但是,爲每個字段添加html段落都需要大量的手動工作。

不過,我想在我的模板像這樣(只是一個例子,並不一定是正是):

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

但僅僅這樣做,我目前的電流獲得(ID = book_id )不起作用。而且,我也無法訪問詳細的名稱。

而且,這將是超級漂亮,如果解決方案也適用於關係,例如:

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

在此它顯示當前所選書的作者表中的所有數據。

無論如何,我希望我的解釋清楚。我不是真的那麼棒問清楚的問題:(

謝謝!

+0

獲取'verbose_name'參見[this SO QA](http:// stackover流。com/questions/14496978/fields-verbose-name-in-templates) – Pynchia

+1

我剛剛發現了一個很好的答案,來自Roger發現的[here](http://stackoverflow.com/a/3431104/1324033),基本上濫用了表單 – Sayse

回答

3

現在是的,你可能濫用元獲得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] 
+0

您可能可以將這些方法與「zip」結合使用,但我恐怕沒有時間爲此創建解決方案 – Sayse

+0

感謝您的回覆。我不知道如果我做錯了什麼,但是如果我嘗試實現你的建議,它只顯示2個字段名稱(沒有詳細名稱),也沒有字段數據。而且,甚至更加狡猾:每次我重新啓動網站時,它都會顯示書籍表中的兩個不同(隨機)字段。 但是,我會更好地審視今天晚些時候鏈接到的'價值'。另外,您在其他評論中添加的鏈接看起來不錯,我也會看看。 – Landcross

+0

@landcross - 是的,我連接的答案是非常美麗,我有點更喜歡它自己誠實 – Sayse