开发者社区> 问答> 正文

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

初学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?

这里的理解是否有错误


展开
收起
爱吃鱼的程序员 2020-06-08 21:21:52 914 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    从测试结果来看,可能是我开始的理解错误了,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

    回复<aclass='referer'target='_blank'>@LionelShen:line是一个字典。你循环它的时候就用line.item不就行了吗。我异或的就是我这个案例1中,返回的到底是个字典还是一个键值的列表呢?

    大佬这么解决的,我的还是不行啊,只显示字典里的键

    2020-06-08 21:22:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载