从视图传递和查看字典到django中的模板

时间:2015-01-09 12:56:31

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

我将字典传递给视图,但它现在显示在页面上。 我也在传递之前打印了字典,它完美地在屏幕上打印整个字典。但是当我把它传递给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 %}

它只显示标题而不是列表元素。

2 个答案:

答案 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 %}