2016-08-23 50 views
0

我想將視圖中的上下文變量傳遞到我的模板中,以指導模板應顯示的內容。如何在Django中將View上下文變量評估爲模板變量?

我有一個上下文列表變量column_headers,它規定了列表頁面表中的列數以及應該使用的標題文本。

context['column_list'] = [ 
    _('Animal'), 
    _('Owner'), 
    _('Reason'), 
    _('Time'), 
    _('Vet'), 
    _('Status') 
] 

我想包括相關列表變量,它告訴模板以包括用於在相應的列中的每個單元,其可變的,例如:

context['cell_vars'] = [ 
    'patient', 
    'client', 
    'reason', 
    'start_time', 
    'attending_staff', 
    'status' 
] 

使得可變FOO.client似乎在'Owner'列和FOO.attending_staff會出現在'Vet'列等

這樣做可以讓我有一個list.html頁面來處理我所有的列表。

所以,我的問題是,這是否是一個好主意,如果是的話,我將如何去評價呈現爲上下文變量「字符串」即

{% for row in rows %} #loop over list data 
    {{ row.attending_staff }} #work fine, but... 
    {{ row.SOME_VARIABLE_THAT_HAS_VALUE_OF_'attending_staff' }} #doesn't 
{% endfor %} 

所以,如果x='attending_staff'我需要能夠評估所述可變​​,使得它實際上評估row.attending_staff

的使用案例,這是非常明確的,並且涉及顯示邏輯只(未檢索數據,因爲數據是已經在循環變量row),所以IMO可能是一個非常適合模板。

這將允許我有一個單獨的'list.hml'模板來處理幾乎所有的列表,而不是我目前使用的是10 x foo_list.html頁面,它們之間都非常相似(表結構,循環邏輯,圖標,鏈接,CSS類名等)。

回答

0

我覺得custom tags or filters將是一個解決方案

例如爲:

@register.filter 
def settings_value(name): 
    return getattr(settings, name, "") 

可在模板中使用像

{% load your_filters %} 
{{ "MY_SETTINGS_NAME"|settings_value }} 
0

你嘗試去做這樣下面?或者,也許你沒有這個選項:

# Python script 
context['column_list'] = [ 
    _('Animal'), 
    _('Owner'), 
    _('Reason'), 
    _('Time'), 
    _('Vet'), 
    _('Status') 
] 

context['cell_vars'] = [ 
    'patient', 
    'client', 
    'reason', 
    'start_time', 
    'attending_staff', 
    'status' 
] 

g_context = zip(context['column_list'], context['cell_vars']) 

# HTML 
{% for column, var in g_context %} 
    {{ column }} 
    {{ var }} 
{% endfor %} 

這是你要求的嗎?