从视图中提取键/值信息

时间:2015-11-19 19:44:37

标签: python django django-templates django-views

我有一个视图代码,它遍历一个保存图像的文件系统目录,并返回一个字典,其中文件名为键,并以值的形式提交:

def export_dir(request):
    user = request.user
    path = '/Users/darius/Desktop/archive/111715/large/'
    file_arr = os.listdir(path)
    records = {}

    for item in file_arr:
        date = os.stat(os.path.join(path + item)).st_mtime
        filetime = time.ctime(os.stat(os.path.join(path + item)).st_mtime)
        if item.startswith('.'):
            continue

        records[item] = filetime

    variables = RequestContext(request, { 'user': user, 'records': records }) 
    return render_to_response("b5/export.html", variables)

如何在模板中提取数据?我目前正在使用自定义模板过滤器:

from django.template.defaulttags import register
...
@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)

我的模板标签如下:

{% for record in records %}                            
<tr>
    <td>{{ record|get_item:item.filename }}</td>
</tr>
{% endfor %}

但我无法过去......

VariableDoesNotExist at /export/
Failed lookup for key [item] in "[{'False': False, 'True': True, 'None': None}, {'records': {'3950_14064_9205_042_large_02.jpg': 'Tue Nov 17 22:26:23 2015', '5920_14009_1851_000_large_02.jpg': 'Tue Nov 17 20:14:34 2015', '0520_15129_0015_907_large_02.jpg': 'Tue Nov 17 21:05:22 2015', '4130_10343_2096_016_large_03.jpg': 'Mon Nov 16 17:17:46 2015’,..

我需要在模板中访问字典数据的语法是什么,或者,我如何修改视图代码?

2 个答案:

答案 0 :(得分:0)

不是按键获取值,而是可以在模板中调用记录dict的values()方法

{% for file_date in records.values %}                            
<tr>
    <td>{{ file_date }}</td>
</tr>
{% endfor %}

或者,如果您需要键和值,请使用项目方法

{% for file_name, file_date in records.items %}                            
<tr>
    <td>{{ file_date }}</td>
</tr>
{% endfor %}

答案 1 :(得分:0)

您的词典中没有名为filename的键。 您应该创建一个列表,例如:

records_list = []

for item in file_arr:
    record = {}
    date = os.stat(os.path.join(path + item)).st_mtime
    filetime = time.ctime(os.stat(os.path.join(path + item)).st_mtime)
    if item.startswith('.'):
        continue

    record['filename'] = filename
    record['filedate'] = filetime
    records_list.append(record)