django 使用带空格的键

mwngjboj  于 2023-08-08  发布在  Go
关注(0)|答案(4)|浏览(99)

在Django模板中有没有一种方法可以实现如下的功能?

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

字符串
啤酒。“煮时间”不管用。简单的解决方案是重命名键boil_time,但我对替代方案很感兴趣。

mlnl4t2r

mlnl4t2r1#

最好的方法是将属性名隐藏到另一个变量中,如下所示:

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

3htmauhk

3htmauhk2#

你可以使用djangosnippets的get过滤器:http://www.djangosnippets.org/snippets/1412/
(重命名密钥可能更好……)

q0qdq0h2

q0qdq0h23#

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

jv2fixgn

jv2fixgn4#

如果你的字典键包含空格,你仍然可以使用Jinja模板。您可以使用模板中的[]语法访问带有空格的字典键。
例如:{{ hop[“boil time”] }}

相关问题