Django шаблон перебирает контекстный список - PullRequest
0 голосов
/ 21 апреля 2020

Я не могу найти четкий ответ по этому вопросу. У меня есть вид, который показывает несколько моделей. В моем шаблоне я выписал все, чтобы вручную отобразить, что я хочу, но на самом деле он не соответствует 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

1 Ответ

1 голос
/ 21 апреля 2020

По умолчанию контекст отображается с помощью переменной object_list. Таким образом, вы можете выполнять итерацию как

{% for i in object_list %}
  // do something 
{% endfor %}

. Вы можете переопределить имя переменной, определив атрибут context_object_name в обобщенном представлении c, которое указывает переменную контекста для использования

class MyView(ListView):
    ...
    ...
    context_object_name = "context"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...