Отображение индекса или имени ключа в шаблоне Django - PullRequest
0 голосов
/ 23 мая 2018

Как мне пройти и отобразить диктовку «имя индекса» или «имя ключа» в шаблоне Django?Ниже указывается контекст из контекста.

По сути, это структура моего диктата all_options[category][sub_category][name].«Категория, подкатегория и имя» являются динамическими.Сначала я хотел отобразить «Категория», затем перейти к «Подкатегории», а затем углубиться.

Шаблоны не позволяют использовать квадратные скобки для доступа к атрибуту dict.

Заранее спасибо!

Контекст

 'Condenser (WC)': {
    'Water Box': {
        '2MPA Condenser Water Box': {
            'option': '2MPA Condenser Water Box',
            'chillers': [{
                'chiller': 'xxxxxxxxxxx',
                'factory': '2' ,
                'option': 'WB240.2U.F2HVKA>
            }, {
                'chiller': 'xxxxxxxxxxx',
                'factory': '1' ,
                'option': 'WB088.2H.F2AYFA>
            }]
        },

    },
    'Anodes': {
        'Magnesium Anodes': {
            'option': 'Magnesium Anodes',
            'chillers': [{
                'chiller': 'xxxxxxxxxxx',
                'factory': '2' ,
                'option': 'WB240.2U.F2HVKA>
            }, {
                'chiller': 'xxxxxxxxxxx',
                'factory': '2' ,
                'option': 'WB240.2U.F2HVKA>
            }]
        }
    },
    'Stainless Steel Tube Sheet': {
        '304 SS Condenser Tube Sheets': {
            'option': '304 SS Condenser Tube Sheets',
            'chillers': [{
                'chiller': 'xxxxxxxxxxx',
                'factory': '2' ,
                'option': 'WB240.2U.F2HVKA>
            }]
        },

    }
},

Шаблон

В шаблоне я добавил комментарий, и это строка, которая нуждается вбыть напечатанным.

 {% for category_name in all_options %}
    {{ category_name }} #Condenser (WC)

{% for subcat in category_name %}
    {{ subcat }} #Water Box

    {% for item in subcat %}
        {{ item }}  #2MPA Condenser Marine Water Box

         {% for chiller in item.chillers %}
            {{ chiller.option }}  #WB200.3K.F2HVKA

        {% endfor%}

    {% endfor%}

{% endfor%}

{% endfor %}

1 Ответ

0 голосов
/ 23 мая 2018

В Python вы можете перебирать итерацию, если 2-tuples , вызывая функцию .items() в словаре.В шаблонах Django мы также можем сделать это:

{% for category_name<b>, category</b> in all_options<b>.items</b> %}
    {{ category_name }} #Condenser (WC)

{% for subcat<b>_name, subcat</b> in <b>category.items</b> %}
    {{ subcat<b>_name</b> }} #Water Box

    {% for item<b>_name, item</b> in <b>subcat.items</b> %}
        {{ item<b>_name</b> }}  #2MPA Condenser Marine Water Box

         {% for chiller in item.chillers %}
            {{ chiller.option }}  #WB200.3K.F2HVKA

        {% endfor%}

    {% endfor%}

{% endfor%}

{% endfor %}

(или что-то похожее на это)

Так что здесь category_name - это ключ , связанный сэлемент словаря, а category - это значение (так что в данном случае это и словарь *).Затем вы можете, например, снова выполнить перечисление по этому словарю и т. Д.

Обратите внимание, что в словарях Python неупорядочено : это означает, что итерация может происходить в любомзаказ возможен.Если вам нужен фиксированный заказ, я советую вам использовать список из двух кортежей, в этом случае вам, конечно, не нужно звонить .items.Кроме того, словарь может содержать только хешируемых ключей, и каждый ключ может встречаться максимум один раз .Это не из-за Django, это просто то, как словари спроектированы в Python.

Как уже говорилось ранее, в случае, если вы хотите упорядоченную коллекцию элементов, такую, что «ключ» не должен быть хэшируемым и /или произойти несколько раз, я бы посоветовал вам использовать список из двух кортежей (что-то вроде [(k1, v1), (k2, v2)] с ki ключом и vi соответствующим значением).

В случае, если вы только интересующие значения, вы можете использовать .values, что приведет к итерации по значениям словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...