Django模板:从字典访问值列表

时间:2015-11-26 13:46:28

标签: python django python-2.7 django-templates django-views

在view.py中我使用下面的for循环来获取json数据

tables = []
column = []
list = []
for row in result:
    d = collections.OrderedDict()
    schematab = row[0].encode('utf8') + '.' +row[1].encode('utf8')
    d  = schematab
    tables.append(d)
column = []
for row in tables:
    d1 = collections.OrderedDict()
    tabcol = row.split('.')
    query2  = 'call SP_Get_TABCOL_Names('+str(pid)+',"'+str(tabcol[1])+'")'

    cursor.execute(query2)
    result2 = cursor.fetchall()
    for i in result2:
        d2 = collections.OrderedDict()
        d2 = i[5]
        column.append(d2)
    d1[row] = column
    list.append(d1)
    column = []
    .....
    ....
context = RequestContext(request,{'appuser':'admin','result':json.dumps(list)})
return HttpResponse(template.render(context), content_type="text/html")

循环结果是此格式的数据

[
 {
    "outlet_db.dim_outlet": ["area , ", "area_mask "], 
    "outlet_db.dim_sales": ["sales1 , ", "sales2 "],
    "outlet_db.dim_product": ["produt1", "product2"]
 }
]

现在在views.html中使用以下循环

{% for key,value in result %}
   {{key}}
   {{value}}
{% endfor %}

这只打印json键,但值为空。我需要键和值。

2 个答案:

答案 0 :(得分:1)

首先,不要将关键字list用作变量名。它是Python中的保留字。将其更改为其他名称。其次,基于这行代码,您将列表传递到您的上下文中。您还需要删除json.dumps方法,因为这会将列表的字符串版本加载到您的上下文变量中。

context = RequestContext(request,{'appuser':'admin','result':json.dumps(list)})

这意味着在您的模板代码中,您必须首先迭代列表,然后才能迭代字典。我刚刚添加了<br>标记以便于阅读。

{% for x in result %}
    {% for key,value in x.items %}
        {{key}}<br>
        {{value}}<br>
    {% endfor %}
{% endfor %}

如果您想坚持使用当前的模板代码,则必须传递字典,但使用.items方法,如下所示:

{% for key,value in result.items %}
    {{key}}<br>
    {{value}}<br>
{% endfor %}

答案 1 :(得分:0)

您可以使用dictionary.items

访问Djangos模板语言中的值

尝试以下方法:

{% for key, value in result.items %}
    {{ key }} 
    {{ value }}
{% endfor %}