gre*_*n69 39 python django django-templates
我正在尝试学习django模板,但这并不容易.
我有一些views.py包含要用模板渲染的字典.字典由键值对组成,其中键是唯一名称,值是与这些名称关联的一些值.我用以下方式渲染字典:
return render_to_response('results.html', {'data': results_dict})
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,在我的模板中,我需要使用亲戚值以字母(或ASCIIbetical)顺序显示名称.
实际上在我的模板中我有:
<table>
{% for key, value in data.items %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
如何以排序方式呈现数据?非常感谢.
Yuj*_*ita 60
在views.py(Python2)中:
return render_to_response('results.html',
{'data': sorted(results_dict.iteritems())})
Run Code Online (Sandbox Code Playgroud)
或者在views.py(Python3)中:
return render_to_response('results.html',
{'data': sorted(results_dict.items())})
Run Code Online (Sandbox Code Playgroud)
在模板文件中:
{% for key, value in data.items() %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
小智 25
虽然更改视图中的代码是可取的,但您也可以使用dictsort模板标记:
https://docs.djangoproject.com/es/1.9/ref/templates/builtins/#std:templatefilter-dictsort
<table>
{% for key, value in data.items|dictsort:"0.lower" %}
<tr>
<td> {{ key }}: </td> <td> {{ value }} </td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
tok*_*fsj 16
另一个对我来说非常好的解决方案,我认为它更简单.它使用OrderedDict() 更多信息
在你的views.py文件中添加:
from collections import OrderedDict
def main(request):
ord_dict = OrderedDict()
ord_dict['2015-06-20'] = {}
ord_dict['2015-06-20']['a'] = '1'
ord_dict['2015-06-20']['b'] = '2'
ord_dict['2015-06-21'] = {}
ord_dict['2015-06-21']['a'] = '10'
ord_dict['2015-06-21']['b'] = '20'
return render(request, 'main.html', {'context': ord_dict})
Run Code Online (Sandbox Code Playgroud)
然后在您的模板中,您可以:
<table>
{% for key, value in context.items %}
<tr>
<td>{{ key }}</td>
<td>{{ value.a }}</td>
<td>{{ value.b }} </td>
</tr>
{% endfor %}
</table>
Run Code Online (Sandbox Code Playgroud)
这将返回字典的键,其顺序与放入它们相同.
2015-06-20 1 2
2015-06-21 10 20
Run Code Online (Sandbox Code Playgroud)
令人耳目一新的问题,但这是我花了一些时间作为编程noobie.它扩展了Yuji Tomita的答案.
如何对如下字典进行排序:
{model_A_object: {key: value, ...},...}
Run Code Online (Sandbox Code Playgroud)
by model_A_object.field.
我用for循环填充它,并使用它来存储我传递给模板的查询集的一些聚合等数据.
我已经设法做到这一点(与#Django帮助的Shubuntu):
result = sorted(dictionary.iteritems(), key= lambda (k, v) : (k.field, v))
Run Code Online (Sandbox Code Playgroud)
然后在模板中:
{% for model_A_object, data in result %}
{% for key, value in data.items %}
...
{% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
干净简单,但初学者并不那么简单.请注意,首先for循环结果不是result.items,因为它不再是字典,而是元组列表.
希望它可以帮助某人.
| 归档时间: |
|
| 查看次数: |
37449 次 |
| 最近记录: |