我将字典传递给视图,但它现在显示在页面上。 我也在传递之前打印了字典,它完美地在屏幕上打印整个字典。但是当我把它传递给html页面时,它根本没有显示..
view.py
def show_log_messages(request):
context = RequestContext(request)
log_dictionary = {}
count = 0
e = log_messages.objects.filter(log_status='Queue').values('sent_to', 'unique_arguments')
count = 0
logs = {}
for d in e:
count +=1
new_dict = {'email': d["sent_to"], 'log_id': d["unique_arguments"]}
logs[count] = new_dict
for keys in logs:
print logs[keys]['log_id']
print logs[keys]['email']
return render_to_response('show_logs.html', logs, context)
show_logs.html
{% if logs %}
<ul>
{% for log in logs: %}
{% for keys in log %}
<li>{{ log[keys]['email'] }}</li>
{% endfor %}
</ul>
{% else %}
<strong>There are no logs present.</strong>
{% endif %}
它只显示标题而不是列表元素。
答案 0 :(得分:4)
你的代码是非常单调和无意义的。您应该传递模板列表而不是字典。
shortcuts.render
使用render_to_response
要比def show_log_messages(request):
messages = log_messages.objects.filter(log_status='Queue') \
.values('sent_to', 'unique_arguments')
logs = [{'email': msg['sent_to'], 'log_id': msg['unique_arguments']}
for msg in messages]
return render(request, 'show_logs.html', {'logs': logs})
更简单。
{% if logs %}
<ul>
{% for log in logs %}
<li>{{ log.email }} - {{ log.log_id }}</li>
{% endfor %}
</ul>
{% else %}
<strong>There are no logs present.</strong>
{% endif %}
模板:
logs
BTW,这里不需要messages
列表。您可以将{{ log.sent_to }}
查询集直接传递到模板中,并在{{ log.unique_arguments }}
标记中显示<li>
和{{1}}。
答案 1 :(得分:1)
render_to_response
快捷方式需要字典。如果您想访问模板中的logs
,它应该在该字典中:
return render_to_response("show_logs.html", {'logs': logs}, context)
第二个问题是您的django模板无效。看起来你正试图在模板中编写Python。您可能会发现阅读Django template language docs很有帮助。
我不清楚您尝试显示的是什么,因此这是循环浏览每个日志并显示其ID和电子邮件的示例。你应该能够调整它以获得你想要的结果。
{% if logs %}
{% for key, value in logs.items %}
{{ key }}, {{ key.log_id}}, {{ key.email }}
{% endf
{% else %}
<strong>There are no logs present.</strong>
{% endif %}