我想将视图中的上下文变量传递到我的模板中,以指示模板应显示的内容。
我有一个上下文列表变量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.x
,以便它实际评估row.attending_staff
此用例非常明确,仅涉及显示逻辑(不是数据检索,因为数据已经在循环变量row
中),因此IMO非常适合模板。
这将允许我有一个单一的list.hml'模板几乎可以处理我的所有列表,而不是我目前的10 x foo_list.html页面,它们彼此非常相似(表结构,循环逻辑,图标,链接,css类名等)。 / p>
答案 0 :(得分:0)
我认为custom tags or filters将是一个解决方案
例如:以下
@register.filter
def settings_value(name):
return getattr(settings, name, "")
可以在
等模板中使用{% load your_filters %}
{{ "MY_SETTINGS_NAME"|settings_value }}
答案 1 :(得分: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 %}
这是你要求的吗?