2014-01-26 88 views
1

我有一個模型實例列表,並希望計算它的每個值在我的視圖中顯示在頁面上。 我試圖將此值傳遞給模板時卡住了。Django模板:通過模型屬性訪問列表元素

我的嘗試: 1)類似{{ list.(model.pk) }} - 顯然是一個語法錯誤。我搜索了網絡和文檔,但找不到有效的語法來首先評估「點」連通的特定部分。

2)給模型一個非數據庫屬性,並簡單地用{{ instance.non_db_value }}訪問它。但看起來模板直接從數據庫中獲取模型值,所以這也失敗了。

一個有點難看的解決方案可能是將模型列表中的所有模型實例包含到單個列表的列表中,每個列表包含兩個值:第一個是實例本身,第二個是我需要傳遞給模板的計算值。我在錯誤的方向思考 -

{% for entry in wrapperlist %} 
    {{ wrapperlist.entry.0 }} <-> {{ wrapperlist.entry.1 }} 
{% endfor %} 

但我不認爲這不能成爲它: 有了這個,我可以用這樣的訪問值?任何建議或想法?

+0

Django的模板過濾器或標籤... – miki725

回答

0

首先,模板不直接從數據庫中獲取模型值。對於模板處理器,您的模型實例是另一個對象。所以,這是完全確定:

#views.py 
foo_list = models.Foo.objects.all() 

for foo in foo_list: 
    foo.non_db_property = some_method() 

render_to_response('template.html', {'foo_list': foo_list}) 

和模板:

{% for foo in foo_list %} 
    <li>{{ foo.non_db_property }}</li> 
{% endfor %} 

,如果它不爲你工作,檢查出錯誤。

另一種方法是,如果值僅基於模型的屬性來創建一個模型方法:

#models.py 
class Foo(models.Model): 
    bar = models.CharField(max_length=3) 
    .... 
    def non_db_value(self): 
     #calculate 
     return value 

模板將保持與上面相同

+0

謝謝,我明白了 - 我重構了代碼,現在這個問題神祕地消失了。我做的主要事情是將Model.objects.all()中的所有條目放到第二個緩衝區列表中,因爲兩次似乎遍歷變量保存的.all()(list = Model.objects.all())刪除非db值。奇怪。 – Faquarl