0

我正在从 djangobook.com 学习 django

作为练习,我正在尝试HttpRequest.META使用模板以表格的形式打印所有字典。

views.py包含

# Create your views here.
from django.http import HttpResponse
from django.shortcuts import render

def http_headers(request):
    return render(request,'headers.html',{'headers':request.META})

headers.html <-- 模板

<html><body><table border="1">
{% for k in headers.keys %}
<tr><td> {{ k }} </td><td>{{ headers.k }}</td></tr>
{% endfor %}
</table></body></html>

输出:

<html><body><table border="1">

<tr><td> TMP </td><td></td></tr>

<tr><td> COMPUTERNAME </td><td></td></tr>

<tr><td> wsgi.multiprocess </td><td></td></tr>

<tr><td> RUN_MAIN </td><td></td></tr>

<tr><td> HTTP_COOKIE </td><td></td></tr>
...
...

问题: 为什么无法访问{{headers.k}}

djangobook.com 说:

点查找可以总结如下:当模板系统在变量名中遇到点时,它会尝试以下查找,顺序如下:

Dictionary lookup (e.g., foo["bar"])
Attribute lookup (e.g., foo.bar)
Method call (e.g., foo.bar())
List-index lookup (e.g., foo[2])

因此,headers.k必须首先匹配字典查找,因为标题是字典。正确的?

我错过了什么

4

1 回答 1

2

headersitems是一本字典,您应该使用(docs )对其进行迭代:

{% for key, value in headers.items %}
    <tr><td> {{ key }} </td><td>{{ value }}</td></tr>
{% endfor %}

您的错误在于使用{{ headers.k }},这基本上是headers['k']-request.META没有k密钥-这就是您什么也看不到的原因。

希望有帮助。

于 2013-08-04T18:00:41.810 回答