Я не могу найти четкий ответ по этому вопросу. У меня есть вид, который показывает несколько моделей. В моем шаблоне я выписал все, чтобы вручную отобразить, что я хочу, но на самом деле он не соответствует DRY, поэтому я бы хотел перебрать контекст. Что я не могу найти, так это то, на что ссылается объект контекста, как в моем шаблоне? В приведенном ниже фрагменте шаблона я написал псевдокод того, чего я хочу достичь.
Отредактировано для упрощения: код в шаблоне работает в оболочке Django, но не в шаблоне
template . html
{% for object in object_list %}
{% for key, value in object.items %}
{% if key == 'string' %}
<h2>{{ value }}</h2>
{% endif %}
{% endfor %}
{% endfor %}
views.py
class ConfigurationDetailView(LoginRequiredMixin, TemplateView):
''' Returns a view of all the models in a configuration '''
template_name = 'configurator/configuration_detail.html'
def get_context_data(self, **kwargs):
''' Uses a list of dictionaries containing plural strings and models to
filter by the configuration ID to only show items in the config. '''
context = super(ConfigurationDetailView, self).get_context_data(**kwargs)
context_dict = [
{'string':'integrations', 'model': IntegrationInstance},
{'string':'control_groups', 'model': ControlGroup},
{'string':'endpoints', 'model': Endpoint},
{'string':'scenes', 'model': Scene},
{'string':'actions', 'model': Action},
{'string':'smart_scenes', 'model': SmartScene},
{'string':'buttons', 'model': Button},
{'string':'button_actions', 'model': ButtonAction},
]
for item in context_dict:
for key, value in item.items():
if key == 'string':
string = value
else:
model = value
context[string] = model.objects.filter(config_id__exact=self.kwargs['config_id'])
return context