django的render_to_response传递字典参数给模版,无法显示预期的值?

LionelShen 发布于 2016/10/13 13:32
阅读 1K+
收藏 0

初学Django,遇到一个render_to_response传递参数的问题

案例1

views.py文件

from django.http import HttpResponse
from django.shortcuts import render_to_response,render

def display_request(request):

    request_dic = {'path':request.path,'host':request.get_host(),'method':request.method}

    return render_to_response('request.html',{'line':request_dic})

模版文件

{% extends "base.html" %}
{% block content %}
示例 HttpRequest 对象:
<ul>
{% for k,v in line %}
    <li> {{k}}:{{v}} </li>
{% endfor %}
</ul>
{% endblock %}

浏览器访问报错,提示传递的不是一个字典,我想问一下哪里错了,我传递的不是一个字典吗?

如果模版里的循环改成下面的样子,不报错,但是输出的内容变了,只显示了key没有显示values

{% for k in line %}
    <li> {{k}} </li>
{% endfor %}

浏览器显示如下:


  • path:
  • host:
  • method:

案例2

views.py
def display_meta(request):
    meta = request.META.items()
    meta.sort()
    return render_to_response('request.html',{'meta_line':meta})

模版文件

示例 request.META 对象:
<ul>
{% for k,v in meta_line %}
    <li> {{k}}:{{v}} </li>
{% endfor %}
</ul>
<li> {{ meta_line }} </li>

这样就可以正常显示request.META的内容。

请问:案例1和案例2中render_to_response传递的第二个参数有什么不同?是否案例1传递是一个列表给了line?

这里的理解是否有错误


加载中
0
LionelShen
LionelShen
从测试结果来看,可能是我开始的理解错误了,return render_to_response('request.html',{'line':request_dic})第二个参数,实际传递的是request_dic的键值列表给了line,所以模版执行for循环时,输出的一个键值的列表。大牛们,这样理解对吗?
0
花落我忧伤
你的问题django官方文档上有例子,上下文是一个字典型变量时这样使用,

{% for key, value in data.items %} {{ key }}: {{ value }} {% endfor %}

原文链接:https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#for

花落我忧伤
回复 @LionelShen : line是一个字典。你循环它的时候就用line.item不就行了吗。
LionelShen
LionelShen
我异或的就是我这个案例1中,返回的到底是个字典还是一个键值的列表呢?
返回顶部
顶部