我想打印出每个选项得到的票数。我有这段代码在一个模板:

{% for choice in choices %}
    {{choice.choice}} - {{votes[choice.id]}} <br />
{% endfor %}

Votes只是一个字典,而choices是一个模型对象。

它用下面的消息引发一个异常:

"Could not parse the remainder"

当前回答

choices = {'key1':'val1', 'key2':'val2'}

下面是模板:

<ul>
{% for key, value in choices.items %} 
  <li>{{key}} - {{value}}</li>
{% endfor %}
</ul>

基本上,.items是一个Django关键字,它将字典拆分为(键,值)对列表,很像Python方法.items()。这使得Django模板中的字典可以迭代。

其他回答

您需要找到(或定义)一个'get'模板标签,例如,在这里。

标签定义:

@register.filter
def hash(h, key):
    return h[key]

它的用法如下:

{% for o in objects %}
  <li>{{ dictionary|hash:o.id }}</li>
{% endfor %}

类似于@russian_spy的回答:

<ul>
{% for choice in choices.items %} 
  <li>{{choice.0}} - {{choice.1}}</li>
{% endfor %}
</ul>

这可能适用于分解更复杂的字典。

你可以使用点符号:

点查找可以总结为 此:当模板系统 在变量名中遇到一个点, 它尝试以下查找,在 这个顺序: 字典查找(例如,foo["bar"]) 属性查找(例如,foo.bar) 方法调用(例如,foo.bar()) 列表索引查找(例如,foo[2]) 系统使用第一种查找类型 这工作。这是短路逻辑。

choices = {'key1':'val1', 'key2':'val2'}

下面是模板:

<ul>
{% for key, value in choices.items %} 
  <li>{{key}} - {{value}}</li>
{% endfor %}
</ul>

基本上,.items是一个Django关键字,它将字典拆分为(键,值)对列表,很像Python方法.items()。这使得Django模板中的字典可以迭代。

django_template_filter 过滤器名称get_value_from_dict

{{ your_dict|get_value_from_dict:your_key }}