2016-08-23 138 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 %} 

这是你要求的吗?