使用带空格的键

2 投票
4 回答
1716 浏览
提问于 2025-04-15 15:57

在Django的模板中,有没有办法做到像下面这样的事情呢?

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

这里的“hop."boil time"”是行不通的。一个简单的解决办法是把这个键改成boil_time,但我想知道有没有其他的办法。

4 个回答

0

对于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 是值。链接。

1

你可以使用一个来自djangosnippets的get过滤器:http://www.djangosnippets.org/snippets/1412/

(把键改个名字可能会更好...)

1

最好的方法是把属性名称放到另一个变量里,像这样:

{% 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 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 %}

还有一种更复杂的方法可以实现这个,使用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 %}

撰写回答