初学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 %}
浏览器显示如下:
案例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?
这里的理解是否有错误
从测试结果来看,可能是我开始的理解错误了,returnrender_to_response('request.html',{'line':request_dic})第二个参数,实际传递的是request_dic的键值列表给了line,所以模版执行for循环时,输出的一个键值的列表。大牛们,这样理解对吗?你的问题django官方文档上有例子,上下文是一个字典型变量时这样使用,
<spanstyle="color:#BC7A00;">{%<spanstyle="color:#008000;font-weight:bold;">for<spanstyle="color:#19177C;">key<spanstyle="color:#666666;">,<spanstyle="color:#19177C;">value<spanstyle="color:#008000;font-weight:bold;">in<spanstyle="color:#19177C;">data.items<spanstyle="color:#BC7A00;">%}<spanstyle="color:#BC7A00;">{{<spanstyle="color:#19177C;">key<spanstyle="color:#BC7A00;">}}:<spanstyle="color:#BC7A00;">{{<spanstyle="color:#19177C;">value<spanstyle="color:#BC7A00;">}}<spanstyle="color:#BC7A00;">{%<spanstyle="color:#008000;font-weight:bold;">endfor<spanstyle="color:#BC7A00;">%}
<spanstyle="color:#BC7A00;">原文链接:https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#for
大佬这么解决的,我的还是不行啊,只显示字典里的键
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。