Использование ключей с пробелами - PullRequest
2 голосов
/ 13 ноября 2009

Есть ли способ сделать что-то вроде следующего в шаблонах Django?

   {% for hop in hops%}
    <tr>  
      <td>{{ hop.name }}</td>
      <td>{{ hop.mass }}</td>  
      <td>{{ hop."boil time" }}</td>
    </tr>
  {% endfor %}

Хоп. "Время кипения" не работает. Простое решение - переименовать ключ в boil_time, но меня интересуют альтернативы.

Ответы [ 3 ]

1 голос
/ 13 ноября 2009

Вы можете использовать get фильтр из djangosnippets: http://www.djangosnippets.org/snippets/1412/

(переименование ключа, вероятно, лучше ...)

1 голос
/ 13 ноября 2009

Лучший способ добиться этого - вставить имя свойства в другую переменную, например:

{% for key, value in hop.items %}
    {% ifequal key 'boil time' %}
        {{ value }}
    {% endifequal %}
{% endfor %}

В Django 0.96 (версия, используемая Google AppEngine) язык шаблонов не поддерживает расширение кортежей, поэтому он немного уродлив:

{% for hop in hops %}
    <tr>
        <td>{{ hop.name }}</td>
        <td>{{ hop.mass }}</td>
        <td>
            {% for item in hop.items %}
                {% ifequal item.0 'boil time' %}
                    {{ item.1 }}
                {% endifequal %}
            {% endfor %}
        </td>
    </tr>
{% endfor %}

Итак, взяв ваш код, мы получим:

{% for hop in hops %}
    <tr>
        <td>{{ hop.name }}</td>
        <td>{{ hop.mass }}</td>
        <td>
            {% for key, value in hop.items %}
                {% ifequal key 'boil time' %}
                    {{ value }}
                {% endifequal %}
            {% endfor %}
        </td>
    </tr>
{% endfor %}

В Django 0.96 (версия в Google AppEnginge) это становится:

{% for hop in hops %}
    <tr>
        <td>{{ hop.name }}</td>
        <td>{{ hop.mass }}</td>
        <td>
            {% for item in hop.items %}
                {% ifequal item.0 'boil time' %}
                    {{ item.1 }}
                {% endifequal %}
            {% endfor %}
        </td>
    </tr>
{% endfor %}

Есть даже более простой способ добиться этого, используя тег regroup:

{% regroup hop.items by 'boil time' as bt %}
    {% for item in bt %}
        {% if forloop.first %}
            {% for item2 in item.list %}
                {% for item3 in item2 %}
                    {% if not forloop.first %}
                        {{ item3 }}
                    {% endif %}
                {% endfor %}
            {% endfor %}
        {% endif %}
{% endfor %}
0 голосов
/ 14 ноября 2009

Для django 0.96, который Google Appengine использует для шаблонов, работает следующее:

{% for hop in recipe.get_hops %}
    {% for item in hop.items %}
          {% ifequal item.0 'boil time' %}
              <p>{{ item.1 }}</p>
          {% endifequal %}
        {% endfor %}   
  {% endfor %}

item.0 - это ключ, а item.1 - это значение. Ссылка.

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