这是我想重复的字典:
{
'04/14/2018': {
'12:15': {
'Club 1': {
'venue_address': 'Address 1',
'venue_webaddress': 'http://www.address1.com/line-up',
'show_data': {
7968: {
'price': '20',
'payment_webaddress': 'http://www.club1.com/reservation/',
'show_title': 'Street 1',
'acts': [('Act 1', None, None), ('Act 2', None, None), ('Act 3', None, None), ('Act 4', None, None), ('Act 5', None, None), ('Act 6', None, None)]
}
}
}
},
'03:00': {
'Club 2': {
'venue_address': 'Address 2',
'venue_webaddress': 'https://www.club2.com/',
'show_data': {
7879: {
'price': 'None',
'payment_webaddress': 'https://www.club2.com/checkout',
'show_title': 'Show Title 2',
'acts': [(None, None, None)]
}
}
}
},
'04:00': {
'Club 3': {
'venue_address': 'Address 3',
'venue_webaddress': 'http://www.club3.com/',
'show_data': {
7703: {
'price': '17',
'payment_webaddress': 'https://www.webaddress.com',
'show_title': 'Show Title Club 3',
'acts': [(None, None, None)]
}
}
}
},
'05:00': {
'Club 4': {
'venue_address': 'Address 4',
'venue_webaddress': 'https://club4.com/',
'show_data': {
7834: {
'price': 'None',
'payment_webaddress': 'https://club4.com/checkout',
'show_title': 'Show Title 4',
'acts': [(None, None, None)]
}
}
}
},
'05:45': {
'Club 5': {
'venue_address': 'Address 5',
'venue_webaddress': 'http://www.club5.com/',
'show_data': {
7569: {
'price': '25',
'payment_webaddress': 'https://www.clubaddress5.com',
'show_title': 'Club Address 5',
'acts': [('Act 1', None, None)]
}
}
}
},
'06:00': {
'Club 6': {
'venue_address': 'Club Address 6',
'venue_webaddress': 'https://www.club6.com/',
'show_data': {
7881: {
'price': 'None',
'payment_webaddress': 'https://www.club6.com',
'show_title': 'Show Title 6',
'acts': [(None, None, None)]
},
7880: {
'price': 'None',
'payment_webaddress': 'https://www.club6.com/checkout',
'show_title': 'Show Title 7',
'comedians': [(None, None, None)]
}
}
},
'Club 8': {
'venue_address': 'Club Address 8',
'venue_webaddress': 'http://club8.com/',
'show_data': {
7809: {
'price': 'None',
'payment_webaddress': 'https://club8.com',
'show_title': 'ACT TITLE 8',
'acts': [(None, None, None)]
}
}
},我在Django视图中使用的代码如下:
dataset_2_ = sorted(dataset_)
context = {'show_dates': dataset_2_, 'show_dataset': dataset_, 'title': title}
return render(request, "pages/pages.html", context)我传递两个数据集的原因是,当我对第一个数据集进行排序以便按日期迭代时,它会丢失所有嵌套数据。
这是我的显示代码:
{% block content %}
{% for date_key in show_dates %}
<div class='row'>
<div class='col-sm-1'></div>
<div class='col-sm-3'>
<h2>{{ date_key }} </h2>
</div>
<div class='col-sm-8'></div>
</div>
{% for time_key in show_dataset.items.date_key %}
<div class='row'>
<div class='col-sm-2'></div>
<div class='col-sm-2'>
<h3>{{ time_key }} </h3>
</div>
<div class='col-sm-8'></div>
</div>
{% endfor %}
{% endfor %}
{% endblock content %}我以为这段代码会产生:
2018年4月14日 中午12:15 3:00 4:00 2018年4月15日
只是它没有而且我也不明白为什么。
发布于 2018-04-14 15:34:19
{{ show_dataset.items }}是字典中的迭代器,所以您不能用date_key订阅它来获取dict项。
此外,您不能只使用变量来查找Django模板中的dict项。
您需要的是首先创建一个查找过滤器自己。在您的应用程序中的template_tags目录中,在文件util_filters.py中创建此筛选器
@register.filter(name='lookup')
def lookup(struct, key):
"""Return element of a list or dict using a variable."""
if isinstance(struct, (list, QuerySet)) and isinstance(key, int) and len(struct) > key:
return struct[key]
elif isinstance(struct, dict):
return struct.get(key, '')
else:
return ''然后在模板中:
{% load util_filters %}
...
{% for time_key in show_dataset|lookup:date_key %}注意,如果您只需要这些键(如您的示例所示),这是可行的。如果您还需要访问每个time_key的值,则必须编写一个不同的过滤器,返回(键,值)对来迭代(items())。
https://stackoverflow.com/questions/49832618
复制相似问题