2015-10-18 77 views
0

我想在django模板中做一些看起來微不足道的事情,但很難想象如何去做。假設我有一個列表field_list = ['a','b','c']和一個名爲的容器report_item。在模板我想基本上這事:如何創建一個動態的Django模板容器參考

{% for fld_name in field_list %} 
    <td>{{ report_item.{{fld_name}} }}</td> 
{% endfor %} 

我已經驗證了report_item.a,.B,.C是可訪問的(即使他們是不是應該沒問題)。我已經試過的報價等,爲解決各種可能的組合和網絡搜索,閱讀文檔N次還繼續收到此錯誤:

Could not parse the remainder: '{{fld_name' from 'field_list.{{fld_name' 

你的幫助是極大的讚賞。

編輯 有人問我,下面我如何建立我的MULTILINE_ACL_COMPONENT:

​​3210

,我有:

context[ "field_list" ] = [ 
     [ "Date Placed",    "date_placed" ], 
     ... 
    ] 

,並在模板中我有:

{% for report_item in items_list %} 
    {% for fld_hdr, fld_name in field_list %} 
     {{ report_item.{{fld_name}} }} 
    {% endfor %} 
{% endfor %} 

正如我之前所說,如果我這樣做:

{{ report_item.date_placed }} 

它工作正常。

+1

你需要爲這個自定義模板過濾器。 –

+0

例子?我看不出過濾器如何幫助解決這個問題。 – staggart

回答

1

您想動態地從對象中獲取屬性。對於Python,你使用getattr,在Python模板中這樣做的方法是編寫一個過濾器,在其參數上調用getattr。現在

@register.filter 
def get_field(obj, arg): 
    return getattr(obj, arg) 

你可以做{{ report_item|get_field:fld_name }}

+0

是的,這是我所需要的,它的工作很好。對於獎勵積分,怎麼來{{x。{{y}}}}不起作用?我會給你信用當賞金可用時,假設有人想出了一個非過濾解決方案。 – staggart

+0

我誤解我什麼時候可以接受答案(困惑於「賞金」的東西。)謝謝。 – staggart

1

試試{{report_item.fld_name}}。希望這可以幫助。

+0

沒有快樂,{{report_item.fld_name}}呈現爲「」(即空字符串,如預期的那樣。 – staggart

+0

你能告訴我你是如何定義report_item的嗎? –

+0

對不起,上面的評論意外提交 - 見我添加的編輯對我的主要職位,我如何建立report_item。 – staggart