3

次のように、選択するフィールド リストがあります。

field_names = [u'name', u'mobile', u'address', u'email', u'sex'] 

次のテンプレートをレンダリングします。

return render_to_string('templatetags/index.html', {
   'objects':User.objects.all().values(*field_names)
})

ただし、返される結果フィールドの順序は、入力フィールドの順序とは異なります。

{{ オブジェクト }} を使用したテンプレートでの出力:

{u'mobile': u'18680868047', u'email': u'', u'sex': u'U', u'name': u'\u4f55\u667a\u5f3a', u'address': u'\u8944\u9633\u5357\u8def175\u53f7 \u73af\u4e2d\u5546\u53a6 410\u5ba4'}

これは私のテンプレートです:

<table>
{% for object in objects %}
<tr>
{% for key,value in object.items %}
   <td class="{{key}}">{{ value }}</td>{% endfor %}
</tr>
{% endfor %}
</table>
4

2 に答える 2

5

queryset.values()辞書のリストを返しますが、辞書はアイテムを特定の順序で返しません。

値を順番に並べたい場合はqueryset.values_list、タプルのリストを返す which を使用します。

(列のリストを別のコンテキスト変数に保持する必要があります)

于 2012-06-23T10:52:03.510 に答える
0

フィールドの順序付けの問題を解決するために OrderedDict コレクション オブジェクトを使用しています。

objects_list = []
for row in queryset:
    ordered_dict = collections.OrderedDict()
    for col in self.field_names:
        ordered_dict[col] = row[col]  
    objects_list.append(ordered_dict) 
于 2012-06-26T10:17:59.437 に答える