Django 模板无法访问字典查找变量。我在代码中犯了啥错误?
Posted
技术标签:
【中文标题】Django 模板无法访问字典查找变量。我在代码中犯了啥错误?【英文标题】:Django template unable to access a dictionary lookup variable. What mistake am I doing in code?Django 模板无法访问字典查找变量。我在代码中犯了什么错误? 【发布时间】:2013-08-05 10:26:21 【问题描述】:我正在 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
必须首先匹配 字典查找,因为 headers 是字典。对吧?
我错过了什么
【问题讨论】:
【参考方案1】:headers
是一个字典,您应该使用items
(docs) 对其进行迭代:
% for key, value in headers.items %
<tr><td> key </td><td> value </td></tr>
% endfor %
你的错误在于使用 headers.k
,基本上是headers['k']
- request.META
没有k
键 - 这就是你什么都看不到的原因。
希望对您有所帮助。
【讨论】:
不是先评估k
的值再使用吗?
不,将k
替换为HTTP_COOKIE
,您将看到值。在这种情况下,k
被解释为字符串。不过,如果您使用 k
- 您将看到循环变量k
的值。这有点令人困惑,我明白。
另见此帖:***.com/questions/2894365/…以上是关于Django 模板无法访问字典查找变量。我在代码中犯了啥错误?的主要内容,如果未能解决你的问题,请参考以下文章